Manipulando exceções de interoperabilidade COM

Os códigos gerenciado e não gerenciado podem trabalhar juntos para tratar de exceções. Se um método lança uma exceção no código gerenciado, o common language runtime pode passar um HRESULT para um objeto COM. Se um método falhar no código não gerenciado, retornando um HRESULT de falha, o runtime lançará uma exceção que pode ser detectada pelo código gerenciado.

O runtime mapeia automaticamente o HRESULT da interoperabilidade COM para exceções mais específicas. Por exemplo, E_ACCESSDENIED se torna UnauthorizedAccessException, E_OUTOFMEMORY se torna OutOfMemoryException e assim por diante.

Se o HRESULT for um resultado personalizado, ou se for desconhecido para o runtime, o runtime passará um COMException genérico ao cliente. A propriedade ErrorCode do COMException contém o valor de HRESULT.

Trabalhar com IErrorInfo

Quando um erro é passado do COM para o código gerenciado, o runtime preenche o objeto de exceção com informações do erro. Objetos COM que dão suporte a IErrorInfo e retornam HRESULTS fornecem essas informações para exceções de código gerenciado. Por exemplo, o runtime mapeia a Descrição do erro COM para a propriedade Message da exceção. Se o HRESULT não fornecer mais informações sobre o erro, o runtime preencherá muitas das propriedades da exceção com valores padrão.

Se um método falhar no código não gerenciado, uma exceção poderá ser passada para um segmento de código gerenciado. O tópico HRESULTS e exceções contém uma tabela que mostra como HRESULTS mapeia para objetos de exceção de runtime.

Confira também