Compartilhar via


Estratégias para lidar com erros no COM+

Este tópico identifica várias estratégias de tratamento de erros a serem consideradas ao desenvolver componentes para COM+.

  • Retornar um valor HRESULT para todos os métodos em todas as interfaces de componente.  COM+ usa valores HRESULT para relatar quaisquer erros ao fazer chamadas de função ou chamadas de método de interface. Um HRESULT indica se um método foi bem-sucedido ou falhou e identifica o recurso associado ao erro, como RPC, WIN32 ou ITF para erros específicos da interface. Além disso, as APIs do sistema fornecem uma pesquisa de um HRESULT para uma cadeia de caracteres que descreve a condição de erro. O uso de métodos que retornam valores HRESULT é fundamental para componentes bem escritos e é essencial para o processo de depuração. Microsoft Visual Basic define automaticamente cada método com um HRESULT como um retorno. No Microsoft Visual C++, você deve retornar explicitamente um HRESULT. Para obter informações adicionais sobre HRESULTs, consulte Estrutura de códigos de erro COM.

  • Inicie o objeto de coleção ErrorInfo por qualquer meio fornecido pela ferramenta de desenvolvimento.Os objetos de coleção ErrorInfo geralmente são chamados de exceções COM porque permitem que um objeto passe (ou lance) informações de erro avançadas para seu chamador, mesmo além dos limites do apartamento. O valor desse objeto de erro genérico é que ele complementa um HRESULT, estendendo o tipo de informações de erro que você pode retornar a um chamador. Cada objeto da coleção ErrorInfo retorna uma descrição contextual, a origem do erro e o identificador de interface do método que originou o erro. Você também pode incluir ponteiros para uma entrada em um arquivo de ajuda. A automação fornece três interfaces para gerenciar o objeto de erro. Seu componente deve implementar a interface de automação ISupportErrorInfo para anunciar seu suporte para a coleção ErrorInfo. Quando ocorre um erro, o componente usa a interface de automação ICreateErrorInfo para inicializar um objeto de erro. Depois que o chamador inspeciona o HRESULT e descobre que a chamada de método falhou, ele consulta o objeto para ver se ele oferece suporte à coleção ErrorInfo . Se isso acontecer, o chamador usará a interface de automação IErrorInfo para recuperar as informações de erro. Programadores do Visual Basic têm acesso fácil ao objeto de coleção ErrorInfo , que é exposto por meio do objeto Err. Você pode gerar erros com a função Err Raise e capturar erros com a instrução On Error . A camada de tempo de execução do Visual Basic cuida do mapeamento para você. Se você estiver usando o suporte ao compilador COM do Visual C++, você pode usar a classe _com_raise_error para relatar um erro e a classe _com_error para recuperar informações de erro. COM+ não propagará exceções C++ tradicionais como informações IErrorInfo estendidas. Para obter informações adicionais sobre o objeto de coleção ErrorInfo, consulte "Tratamento de erros" no guia de automação.

    Observação

    COM requer que todos os objetos da coleção ErrorInfo marshal por valor, implicando que os componentes que implementam a interface de automação IErrorInfo também devem implementar e oferecer suporte à interface IMarshal. A implementação da interface IMarshal deve oferecer suporte a marshal por valor para o componente.

     

  • Use transações para gerenciar falhas de recursos compartilhados. As transações automáticas podem reduzir significativamente a quantidade de código de tratamento de erros que você deve escrever ao usar gerenciadores de recursos gerenciados por estado. No entanto, as transações não eliminam completamente a necessidade de tratamento de erros. Você ainda precisa retornar códigos de erro de seus métodos de interface e verificar esses códigos de erro dentro do chamador para evitar fazer trabalho desnecessário para uma transação condenada. Para obter informações adicionais sobre como combinar o tratamento de erros com o processamento de transações, consulte Acelerando transações notificando o objeto raiz.

  • Levante erros explicitamente. Evite permitir que as informações de erro deixem um objeto, a menos que o objeto gere explicitamente o erro. Capture todos os erros gerados pela ferramenta e manipule-os em seu código de componente. No mínimo, inclua um manipulador padrão para relatar erros inesperados de maneira consistente.

  • Use o FACILITY_ITF intervalo de erros para relatar erros específicos da interface. Os erros específicos da interface devem estar na FACILITY_ITF faixa de erros, entre 0x0200 e 0xFFFF. Você pode definir um código de erro personalizado no Visual Basic como um deslocamento de vbObjectError. Use a macro MAKE_HRESULT em C++ para introduzir um código de erro específico da interface, conforme mostrado no exemplo a seguir:

    const HRESULT ERROR_NUMBER = MAKE_HRESULT (SEVERITY_ERROR, FACILITY_ITF, 10);
    

Política de isolamento de falhas e failfast

Localizando a origem de um erro

Como COM+ modifica valores de retorno

Interpretando códigos de erro

Solução de problemas