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. Il mapping HRESULT-to-exception funziona anche in altra direzione restituendo HRESULT specifici ai client non gestiti. Per informazioni dettagliate sul mapping, vedere Come eseguire il mapping di HRESULTs 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 all-purpose espone gli stessi membri di qualsiasi eccezione e eredita una proprietà pubblica ErrorCode che contiene l'oggetto HRESULT restituito dal chiamato. 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. Se invece lo sviluppatore del componente COM non include un messaggio di errore, in sostituzione della stringa del messaggio verrà restituito l'HRESULT di otto cifre. La presenza di un HRESULT consente al chiamante di determinare la causa dell'eccezione generica.

Gestire un'eccezione 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 tardiva presuppone che nelle chiamate ai metodi venga utilizzato un parametro ByRef e che la proprietà passata disponga di una funzione di accesso set . Se la proprietà non lo fa, .NET genera un'eccezione MissingMethodException (con hresult CORE_E_MISSINGMETHOD ). Per ovviare a questo problema, utilizzare oggetti con associazione anticipata oppure 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 Amministrazione istrator 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.