Gestione di eccezioni per interoperabilità COMHandling COM Interop Exceptions

Il codice gestito può essere integrato con il codice non gestito per la gestione delle eccezioni.Managed and unmanaged code can work together to handle exceptions. Se un metodo genera un'eccezione nel codice gestito, Common Language Runtime può passare un valore HRESULT a un oggetto COM.If a method throws an exception in managed code, the common language runtime can pass an HRESULT to a COM object. Se un metodo non riesce nel codice non gestito, restituendo un HRESULT di errore, il runtime genera un'eccezione che può essere intercettata dal codice gestito.If a method fails in unmanaged code by returning a failure HRESULT, the runtime throws an exception that can be caught by managed code.

Il runtime esegue automaticamente il mapping HRESULT dall'interoperabilità COM per le eccezioni più specifiche.The runtime automatically maps the HRESULT from COM interop to more specific exceptions. Ad esempio, E_ACCESSDENIED diventa UnauthorizedAccessException, E_OUTOFMEMORY diventa OutOfMemoryException, e così via.For example, E_ACCESSDENIED becomes UnauthorizedAccessException, E_OUTOFMEMORY becomes OutOfMemoryException, and so on.

Se il valore HRESULT è un risultato personalizzato o se è noto al runtime, il runtime passa un oggetto generico COMException al client.If the HRESULT is a custom result or if it is unknown to the runtime, the runtime passes a generic COMException to the client. La proprietà ErrorCode di COMException contiene il valore HRESULT.The ErrorCode property of the COMException contains the HRESULT value.

Uso di IErrorInfoWorking with IErrorInfo

Quando un errore viene passato da COM al codice gestito, il runtime compila l'oggetto eccezione con informazioni sull'errore.When an error is passed from COM to managed code, the runtime populates the exception object with error information. Gli oggetti COM che supportano IErrorInfo e restituiscono valori HRESULT forniscono queste informazioni per le eccezioni del codice gestito.COM objects that support IErrorInfo and return HRESULTS provide this information to managed code exceptions. Ad esempio, il runtime esegue il mapping della descrizione dell'errore COM alla proprietà Message dell'eccezione.For example, the runtime maps the Description from the COM error to the exception's Message property. Se il valore HRESULT non fornisce alcuna informazione di errore, il runtime compila molte delle proprietà dell'eccezione con i valori predefiniti.If the HRESULT provides no additional error information, the runtime fills many of the exception's properties with default values.

Se un metodo non riesce nel codice non gestito, un'eccezione può essere passata a un segmento di codice gestito.If a method fails in unmanaged code, an exception can be passed to a managed code segment. L'argomento HRESULT ed eccezioni contiene una tabella che mostra il mapping di HRESULT a oggetti eccezione di runtime.The topic HRESULTS and Exceptions contains a table showing how HRESULTS map to runtime exception objects.

Vedere ancheSee Also

EccezioniExceptions