System.Runtime.InteropServices.COMException osztály

Megjegyzés:

Ez a cikk kiegészítő megjegyzéseket tartalmaz az API referenciadokumentációjához.

Az COMException osztály az a kivétel, amely akkor fordul elő, ha a rendszer nem felismert HRESULT-t ad vissza egy COM-metódushívásból.

A közös nyelvi futtatókörnyezet a jól ismert HRESULT-eket .NET-kivételekké alakítja át, így a COM-objektumok értelmes hibainformációkat adnak vissza a felügyelt ügyfeleknek. Az HRESULT-to-exception leképzés a másik irányban is működik, és konkrét HRESULT-okat juttat vissza nem menedzselt klienseknek. Az HRESULT-ek és kivételek leképezéséről szóló részletekért lásd: Hogyan kell leképezni az HRESULT-eket és a kivételeket.

Amikor a futtatókörnyezet ismeretlen HRESULT-tal találkozik (olyan HRESULT-tal, amelyhez nincs meghatározott, megfelelő kivétel), a COMException osztály egy példányát dobja ki. Ez a minden célra használható kivétel ugyanazokat a tagokat teszi elérhetővé, mint bármely más kivétel, és örököl egy nyilvános ErrorCode tulajdonságot, amely tartalmazza a hívó által visszaadott HRESULT értéket (egy visszatérési érték a hívástól). Ha egy hibaüzenet elérhető a futtatókörnyezet számára (az IErrorInfo felületről vagy a Err Visual Basic objektumából, vagy bizonyos esetekben az operációs rendszerből), a rendszer visszaadja az üzenetet a hívónak. Ha azonban a COM-összetevő fejlesztője nem tartalmaz hibaüzenetet, a futtatókörnyezet egy üzenetsztring helyett a nyolcjegyű HRESULT értéket adja vissza. A HRESULT használatával a hívó meghatározhatja az általános kivétel okát.

COMException kivétel kezelése

Az alábbiakban néhány szempontot figyelembe kell venni egy COMException kivétel hibaelhárításához.

Ellenőrizze a ErrorCode tulajdonságot, ha a futtatókörnyezet ismeretlen HRESULT-tal találkozik, és kivételt COMException jelez, a ErrorCode tulajdonság tartalmazza a hibaüzenetet, vagy ha egy hibaüzenet nem érhető el, a nyolcjegyű HRESULT értéket. A hibaüzenet vagy a HRESULT érték segíthet meghatározni a kivétel okát.

A HRESULT értékek listáját a Gyakori HRESULT értékek című témakörben találja.

Ha későn kötött argumentumokat ad át a Microsoft Office-objektumok metódusainak, kivételt okozhat, COMException ha az objektumok COM-objektumok. A késői iratgyűjtő feltételezi, hogy az ilyen metódushívások magukban foglalnak egy ByRef paramétert, és hogy az átadott tulajdonsághoz tartozik egy set hozzáférő. Ha a tulajdonság nem létezik, a .NET egy MissingMethodException kivételt hoz létre (egy CORE_E_MISSINGMETHOD HRESULT-tal). A viselkedés megkerüléséhez használjon korai kötésű objektumokat, vagy adjon át egy változót az objektum tulajdonsága helyett.

A COM a Visual Studio és az üzemeltetési folyamat közötti kommunikációra szolgál. Mivel a kód futtatása előtt használják, a CoInitializeSecurity hívása miatt ez a kivétel ki lesz dobva. Bizonyos esetekben a Visual Studio rendszergazdaként való futtatása megoldhatja a problémát. Az üzemeltetési folyamatot is letilthatja.

Dobja a COMException kivételt

Bár az COMException osztály használatával adott HRESULT-értékeket adhat vissza a nem felügyelt ügyfeleknek, egy adott .NET-kivétel eldobása jobb, mint egy általános kivétel használata. Vegye figyelembe, hogy a felügyelt ügyfelek és a nem felügyelt ügyfelek is használhatják a .NET-objektumot, és a HRESULT egy felügyelt hívónak való dobása kevésbé érthető, mint egy kivétel kivetése.