Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Observação
Este artigo fornece observações complementares à documentação de referência para esta API.
A classe COMException é a exceção lançada quando um HRESULT não reconhecido é retornado após uma chamada de método COM.
O Common Language Runtime transforma HRESULTs bem conhecidos em exceções .NET, permitindo que objetos COM retornem informações de erro significativas para clientes geridos. O mapeamento HRESULT-to-exception também funciona em sentido inverso, retornando HRESULTs específicos para clientes não geridos. Para obter detalhes de mapeamento, consulte Como mapear HRESULTs e exceções.
Quando o tempo de execução encontra um HRESULT desconhecido (um HRESULT que não possui uma exceção específica correspondente), lança uma instância da classe COMException. Essa exceção para todos os fins expõe os mesmos membros que qualquer exceção e herda uma propriedade pública ErrorCode que contém o HRESULT retornado pelo destinatário. Se uma mensagem de erro estiver disponível para o tempo de execução (obtida da interface IErrorInfo ou do Err objeto no Visual Basic ou, em alguns casos, do sistema operacional), a mensagem será retornada para o chamador. No entanto, se o desenvolvedor do componente COM não incluir uma mensagem de erro, o tempo de execução retorna o HRESULT de oito dígitos no lugar de uma cadeia de caracteres de mensagem. Ter um HRESULT permite que o chamador determine a causa da exceção genérica.
Manipular uma exceção COMException
A seguir estão algumas considerações para solucionar problemas de uma COMException exceção.
Verifique a ErrorCode propriedade. Quando o runtime encontra um HRESULT desconhecido e lança uma exceção COMException, a propriedade ErrorCode inclui a mensagem de erro ou, caso esta não esteja disponível, o valor HRESULT de oito dígitos. A mensagem de erro ou o valor HRESULT pode ajudá-lo a determinar a causa da exceção.
Para obter uma lista de valores HRESULT, consulte Valores comuns de HRESULT.
Ao passar argumentos de ligação tardia para os métodos de objetos do tipo Microsoft Office, uma exceção COMException pode ser lançada quando esses objetos são do tipo COM. O vinculador tardio assume que tais chamadas de método envolvem um ByRef parâmetro e que a propriedade que é passada tem um set acessor. Se a propriedade não existir, o .NET gerará uma MissingMethodException exceção (com um CORE_E_MISSINGMETHOD HRESULT). Para contornar esse comportamento, use objetos de ligação antecipada ou passe uma variável em vez de uma propriedade do objeto.
COM é usado para se comunicar entre o Visual Studio e o processo de hospedagem. Como ele é usado antes da execução do código, uma chamada para CoInitializeSecurity faz com que essa exceção seja lançada. Em alguns casos, executar o Visual Studio como administrador pode resolver o problema. Você também pode desativar o processo de hospedagem.
Gerar uma exceção COMException
Embora você possa usar a COMException classe para retornar HRESULTs específicos para clientes não gerenciados, lançar uma exceção .NET específica é melhor do que usar uma exceção genérica. Considere que clientes gerenciados, bem como clientes não gerenciados, podem usar seu objeto .NET, e lançar um HRESULT para um chamador gerenciado é menos compreensível do que lançar uma exceção.