Klasse System.Runtime.InteropServices.COMException

Opmerking

In dit artikel vindt u aanvullende opmerkingen in de referentiedocumentatie voor deze API.

De COMException klasse is de uitzondering die wordt gegenereerd wanneer een niet-herkende HRESULT wordt geretourneerd vanuit een COM-methodeaanroep.

De algemene taalruntime transformeert bekende HRESULTs naar .NET-uitzonderingen, waardoor COM-objecten zinvolle foutinformatie kunnen retourneren aan beheerde clients. De toewijzing van HRESULT-naar-uitzondering werkt ook in de andere richting door specifieke HRESULT's te retourneren aan niet-beheerde clients. Raadpleeg How to map HRESULTs and exceptions voor toewijzingsdetails.

Wanneer de runtime een onbekende HRESULT tegenkomt (een HRESULT die een specifieke, bijbehorende uitzondering mist), wordt er een exemplaar van de COMException klasse gegenereerd. Deze allesomvattende uitzondering toont dezelfde leden als andere uitzonderingen en erft een openbare ErrorCode eigenschap die het HRESULT bevat dat door de aangeroepen functie wordt geretourneerd. Als er een foutbericht beschikbaar is voor de runtime (verkregen via de IErrorInfo-interface of het Err object in Visual Basic of in sommige gevallen van het besturingssysteem), wordt het bericht geretourneerd naar de aanroeper. Als de COM-onderdeelontwikkelaar echter geen foutbericht kan opnemen, retourneert de runtime het achtcijferige HRESULT in plaats van een berichttekenreeks. Als u een HRESULT hebt, kan de beller de oorzaak van de algemene uitzondering bepalen.

Een COMException-uitzondering verwerken

Hier volgen enkele overwegingen voor het oplossen van problemen met een COMException uitzondering.

Controleer de ErrorCode eigenschap Wanneer de runtime een onbekende HRESULT tegenkomt en een COMException uitzondering genereert, bevat de ErrorCode eigenschap het foutbericht of, als er een foutbericht niet beschikbaar is, de waarde van HRESULT met acht cijfers. Het foutbericht of de HRESULT-waarde kan u helpen de oorzaak van de uitzondering te bepalen.

Zie Algemene HRESULT-waarden voor een lijst met HRESULT-waarden.

Wanneer u late gebonden argumenten doorgeeft aan methoden van Microsoft Office-objecten, kan er een COMException uitzondering worden gegenereerd wanneer de objecten COM-objecten zijn. De late binder gaat ervan uit dat dergelijke methode-aanroepen betrekking hebben op een ByRef parameter en dat de eigenschap die u doorgeeft een set accessor heeft. Als de eigenschap dit niet doet, genereert .NET een MissingMethodException uitzondering (met een CORE_E_MISSINGMETHOD HRESULT). Als u dit gedrag wilt omzeilen, gebruikt u vroeggebonden objecten of geeft u een variabele door in plaats van een eigenschap van het object.

COM wordt gebruikt om te communiceren tussen Visual Studio en het hostingproces. Omdat deze wordt gebruikt voordat code wordt uitgevoerd, zorgt een aanroep van CoInitializeSecurity ervoor dat deze uitzondering wordt gegenereerd. In sommige gevallen kan het probleem worden opgelost door Visual Studio als administrator uit te voeren. U kunt het hostingproces ook uitschakelen.

Een COMException-uitzondering genereren

Hoewel u de COMException klasse kunt gebruiken om specifieke HRESULT's te retourneren aan onbeheerde clients, is het genereren van een specifieke .NET-uitzondering beter dan het gebruik van een algemene uitzondering. Houd er rekening mee dat beheerde clients en niet-beheerde clients uw .NET-object kunnen gebruiken en dat het genereren van een HRESULT voor een beheerde beller minder begrijpelijk is dan het genereren van een uitzondering.