Partilhar via


Gestão de Exceções de Interoperação COM

Código gerido e não gerido podem trabalhar em conjunto para lidar com exceções. Se um método lançar uma exceção em código gerido, o runtime da linguagem comum pode passar um HRESULT para um objeto COM. Se um método falhar em código não gerido ao devolver um HRESULT falhado, o runtime lança uma exceção que pode ser detetada pelo código gerido.

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

Se o HRESULT for um resultado personalizado ou desconhecido para o tempo de execução, este passa um genérico COMException para o cliente. A propriedade ErrorCode da COMException contém o valor HRESULT.

Trabalhar com o IErrorInfo

Quando um erro é passado do COM para o código gerido, o runtime preenche o objeto de exceção com informação de erro. Os objetos COM que suportam IErrorInfo e devolvem HRESULTS fornecem esta informação às exceções de código gerido. Por exemplo, o runtime mapeia a Descrição do erro COM para a propriedade da exceção Message. Se o HRESULT não fornecer informação adicional de erro, o runtime preenche muitas das propriedades da exceção com valores padrão.

Se um método falhar em código não gerido, uma exceção pode ser passada a um segmento de código gerido. O tópico HRESULTS e Exceções contém uma tabela que mostra como os HRESULTS mapeiam para objetos de exceção em tempo de execução.

Consulte também