Lidando com exceções de interoperabilidade COM
Código gerenciado e não gerenciado podem trabalhar juntos para lidar com 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 em código não gerenciado retornando uma falha HRESULT, o tempo de execução lançará uma exceção que pode ser capturada pelo código gerenciado.
O tempo de execução 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 por diante.
Se o HRESULT for um resultado personalizado ou se for desconhecido para o tempo de execução, o tempo de execução passará um genérico COMException para o cliente. A propriedade ErrorCode do COMException contém o valor HRESULT.
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. Os objetos COM que suportam IErrorInfo e retornam HRESULTS fornecem essas informações para exceções de código gerenciado. Por exemplo, o tempo de execução mapeia a Descrição do erro COM para a propriedade da Message exceção. Se o HRESULT não fornecer informações de erro adicionais, o tempo de execução preencherá muitas das propriedades da exceção com valores padrão.
Se um método falhar em código não gerenciado, uma exceção poderá ser passada para um segmento de código gerenciado. O tópico HRESULTS and Exceptions contém uma tabela que mostra como HRESULTS é mapeado para objetos de exceção de tempo de execução.