Condividi tramite


Classe System.Runtime.InteropServices.COMException

Questo articolo fornisce osservazioni supplementari alla documentazione di riferimento per questa API.

La COMException classe è l'eccezione generata quando viene restituito un HRESULT non riconosciuto da una chiamata al metodo COM.

Common Language Runtime trasforma le eccezioni HRESULT note in eccezioni .NET, consentendo agli oggetti COM di restituire informazioni significative sugli errori ai client gestiti. La mappatura da HRESULT a exception funziona anche nell'altra direzione restituendo HRESULT specifici ai clienti non gestiti. Per dettagli sulla mappatura, vedere Come eseguire la mappatura di HRESULT ed eccezioni.

Quando il runtime rileva un HRESULT sconosciuto (hresult privo di un'eccezione specifica e corrispondente), genera un'istanza della COMException classe . Questa eccezione universale espone gli stessi membri di qualsiasi eccezione e eredita una proprietà pubblica ErrorCode che contiene il valore HRESULT restituito dalla parte chiamata. Se è disponibile un messaggio di errore per il runtime (ottenuto dall'interfaccia IErrorInfo o dall'oggetto Err in Visual Basic o in alcuni casi dal sistema operativo), il messaggio viene restituito al chiamante. Tuttavia, se lo sviluppatore del componente COM non include un messaggio di errore, il runtime restituisce il valore HRESULT a otto cifre al posto di una stringa di messaggio. La presenza di un HRESULT consente al chiamante di determinare la causa dell'eccezione generica.

Gestire un'eccezione di tipo COMException

Di seguito sono riportate alcune considerazioni per la risoluzione di un'eccezione COMException .

Controllare la ErrorCode proprietà Quando il runtime rileva un HRESULT non familiare e genera un'eccezione COMException , la ErrorCode proprietà include il messaggio di errore o, se un messaggio di errore non è disponibile, il valore HRESULT a otto cifre. Il messaggio di errore o il valore HRESULT consente di determinare la causa dell'eccezione.

Per un elenco dei valori HRESULT, vedere Valori HRESULT comuni.

Quando si passano argomenti con associazione tardiva ai metodi degli oggetti di Microsoft Office, è possibile che venga generata un'eccezione COMException quando gli oggetti sono oggetti COM. Il gestore di associazione tardivo presuppone che tali chiamate al metodo includano un ByRef parametro e che la proprietà passata abbia una set funzione di accesso. Se la proprietà non esiste, .NET genera un'eccezione MissingMethodException (con un HRESULT CORE_E_MISSINGMETHOD ). Per ovviare a questo comportamento, utilizzare oggetti con associazione anticipata o passare una variabile anziché una proprietà dell'oggetto .

COM viene usato per comunicare tra Visual Studio e il processo di hosting. Poiché viene usato prima dell'esecuzione del codice, una chiamata a CoInitializeSecurity causa la generazione di questa eccezione. In alcuni casi, l'esecuzione di Visual Studio come amministratore può risolvere il problema. È anche possibile disabilitare il processo di hosting.

Generare un'eccezione COMException

Sebbene sia possibile usare la COMException classe per restituire HRESULT specifici ai client non gestiti, la generazione di un'eccezione .NET specifica è migliore rispetto all'uso di un'eccezione generica. Si consideri che i client gestiti e i client non gestiti possono usare l'oggetto .NET e generare un HRESULT a un chiamante gestito è meno comprensibile che generare un'eccezione.