Jak nahradit výjimka #import 's zvýšení mechanismus pro objekty ADO (ActiveX Data) v jazyce C++

Překlady článku Překlady článku
ID článku: 177425 - Produkty, které se vztahují k tomuto článku.
Tento článek byl archivován. Je nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.
Poznámka: Microsoft Visual C++ .NET 2002 a Microsoft Visual C++ .NET 2003 podporují model spravovaný kód, který je součástí Microsoft .NET Framework a Nespravovaná nativní kód modelu Microsoft Windows. Informace v tomto článku platí pouze pro nespravované kód jazyka C++.Microsoft Visual C++ .NET 2005 podporuje model spravovaný kód, který je součástí Microsoft .NET Framework a Nespravovaná nativní kód modelu Microsoft Windows.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Vytvoření aplikace klienta pomocí příkazu #import zavádí zpracování prostřednictvím třída výjimek _com_error, pokud narazí obálky pro metodu objektu se nezdařilo HRESULT výjimek. Pravděpodobně platný důvodů nahradit tento mechanismus s vlastní implementací.

Další informace

Existují dva způsoby použití #import a není nutné zvýšit výjimky HRESULTS se nezdařilo. První je jednoduše použít klauzuli raw_interfaces_only příkazem #import. Však tato Neguje některé výhody tříd obálky, který poskytuje #import.

Druhý postup je poskytnutím vlastní implementaci _com_raise_error, která má následující prototyp a výchozí implementace:

   void __stdcall _com_raise_error(HRESULT hr, IErrorInfo* perrinfo = 0)
   throw(_com_error);

   void __stdcall
   _com_raise_error(HRESULT hr, IErrorInfo* perrinfo = 0) throw(_com_error)
   {
       throw _com_error(hr, perrinfo);
   }
				
Tato funkce je deklarována, ale není implementována v souboru Comdef.h. Pokud poskytují vlastní implementace v souboru .OBJ použije linker, že implementace, nikoli na uvedením ze souboru Comsupp.lib. v vlastní objekt v souboru Comsupp.lib existuje _com_raise_error, takže jej mohou být snadno nahrazeny váš kód.

Následuje ukázkový implementace výjimka #import zvýšení funkce.

Poznámka: aktuálně kompilátor ignoruje výjimka funkce-specifikace a generuje následující upozornění:

upozornění C4290: Specifikace C++ výjimka ignorována.
V tomto okamžiku podrobnosti implementace specifikace výjimka mít není byla standardizovány a jsou přijat však není implementována Microsoft Visual C++. Kód zkompilovaný ignorované výjimky specifikace potřebovat recompiled a propojené opakovaně v budoucích verzích podpůrné specifikace výjimku. Toto upozornění se můžete vyhnout pomocí pragma upozornění:

#pragma warning( disable : 4290 ) 
				

Ukázkový kód

   void __stdcall
   _com_raise_error(HRESULT hr, IErrorInfo* perrinfo = 0) throw(_com_error)
       {
           //This message box is for demonstration purpose only.
           AfxMessageBox( "_com_raise_error (HRESULT, IErrorInfo*)" );
           //Your own error handling code or just an abort.
       }

    #import <msado15.dll>
        ...


     _bstr_t     bstrEmpty(L"");
     _ConnectionPtr  Conn1 = NULL;
     Conn1.CreateInstance( __uuidof( Connection ) );
     Conn1->Open( bstrEmpty, bstrEmpty, bstrEmpty );

				
Tento kód se pokusí otevřít objekt připojení ActiveX Data Objects (ADO) bez zadání jakýchkoli informací platné připojení. Nahrazení _com_raise_error zabráněno _com_error právě aktivovaná.

Vlastnosti

ID článku: 177425 - Poslední aktualizace: 28. února 2014 - Revize: 4.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
Klíčová slova: 
kbnosurvey kbarchive kbmt kbhowto kbcompiler kbdatabase kbinfo kbmdacnosweep KB177425 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:177425

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com