Manipulando Exceções de Interoperabilidade COM
Códigos gerenciados e não gerenciados podem trabalhar juntos para manipular exceções.Se um método lança uma exceção em um 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 tempo de execução lança uma exceção que pode ser capturada pelo código gerenciado.
O tempo de execução automaticamente mapeia o HRESULT de 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 for desconhecido para o tempo de execução, o tempo de execução passa um COMException genérico para o cliente.A propriedade ErrorCode do COMException contém o valor HRESULT.
Para uma discussão completa de interoperabilidade COM, consulte Interoperabilidade COM Avançados.
Trabalhando com IErrorInfo
Quando um erro é passado de COM para código gerenciado, o tempo de execução preenche o objeto de exceção com informações de erro.Objetos COM que suportam IErrorInfo e retornam HRESULTS fornecem essa informação para exceções de código gerenciado.Por exemplo, o tempo de execução mapeia a descrição do erro COM para a exceção da propriedade Message.Se o HRESULT não fornecer nenhuma informação de erro adicional, o tempo de execução preenche muitas das propriedades da exceção com valores padrão.
Se um método falhar no código não gerenciado, uma exceção pode ser passada para um segmento de código gerenciado.O tópico HRESULTS and Exceptions contém uma tabela mostrando como HRESULTS mapeiam para objetos de exceção de tempo de execução.