Compartilhar via


Função SetErrorInfo (oleauto.h)

Define o objeto de informações de erro para o thread lógico atual de execução.

Sintaxe

HRESULT SetErrorInfo(
  [in]           ULONG      dwReserved,
  [in, optional] IErrorInfo *perrinfo
);

Parâmetros

[in] dwReserved

Reservado para uso futuro. Deve ser zero.

[in, optional] perrinfo

Um objeto de erro.

Retornar valor

Se essa função for bem-sucedida, ela retornará S_OK. Caso contrário, ele retornará um código de erro HRESULT.

Comentários

Essa função libera o objeto de informações de erro existente, se houver, e define o ponteiro como perrinfo. Use essa função depois de criar um objeto de erro que associe o objeto ao thread lógico atual de execução.

Se a propriedade ou método que chama SetErrorInfo for chamado por DispInvoke, DispInvoke preencherá o parâmetro EXCEPINFO com os valores especificados no objeto de informações de erro. DispInvoke retornará DISP_E_EXCEPTION quando a propriedade ou o método retornar um valor de retorno de falha para DispInvoke

Os controladores de associação VTBL (tabela de funções virtuais) que não usam IDispatch::Invoke podem obter o objeto de informações de erro usando GetErrorInfo. Isso permite que um objeto que dê suporte a uma interface dupla use SetErrorInfo, independentemente de o cliente usar associação VTBL ou IDispatch.

Quando uma chamada entre apartamentos é feita COM limpa qualquer objeto de erro.

Fazer uma chamada COM que passa por um proxy-stub limpará qualquer objeto de erro existente para o thread de chamada. Um objeto chamado não deve fazer essas chamadas depois de chamar SetErrorInfo e antes de retornar. O chamador não deve fazer essas chamadas depois que a chamada retornar e antes de chamar GetErrorInfo. Como regra geral, um método de interface deve retornar o mais rápido possível depois de chamar SetErrorInfo, e o chamador deve chamar GetErrorInfo o mais rápido possível após o retorno da chamada.

Inserir o loop de mensagem modal COM limpará qualquer objeto de erro existente. Um objeto chamado não deve inserir um loop de mensagem depois de chamar SetErrorInfo.

Exemplos

ICreateErrorInfo *pcerrinfo;
IErrorInfo *perrinfo;
HRESULT hr;

hr = CreateErrorInfo(&pcerrinfo);
if (SUCCEEDED(hr))
{
   hr = pcerrinfo->QueryInterface(IID_IErrorInfo, (LPVOID FAR*) &perrinfo);
   if (SUCCEEDED(hr))
   {
      SetErrorInfo(0, perrinfo);
      perrinfo->Release();
   }
   pcerrinfo->Release();
}

Requisitos

Requisito Valor
Plataforma de Destino Windows
Cabeçalho oleauto.h
Biblioteca OleAut32.lib
DLL OleAut32.dll