Compartilhar via


Função CoUnmarshalInterface (combaseapi.h)

Inicializa um proxy recém-criado usando dados gravados no fluxo por uma chamada anterior para a função CoMarshalInterface e retorna um ponteiro de interface para esse proxy.

Sintaxe

HRESULT CoUnmarshalInterface(
  [in]  LPSTREAM pStm,
  [in]  REFIID   riid,
  [out] LPVOID   *ppv
);

Parâmetros

[in] pStm

Um ponteiro para o fluxo do qual a interface deve ser demarsalada.

[in] riid

Uma referência ao identificador da interface a ser desmarsalada. Para IID_NULL, a interface retornada é aquela definida pelo fluxo, objref.iid.

[out] ppv

O endereço da variável de ponteiro que recebe o ponteiro de interface solicitado em riid. Após o retorno bem-sucedido, *ppv contém o ponteiro de interface solicitado para a interface nãomarshaled.

Retornar valor

Essa função pode retornar o valor retornado padrão E_FAIL, os erros retornados por CoCreateInstance e os valores a seguir.

Código de retorno Descrição
S_OK
O ponteiro da interface não foimarsalizado com êxito.
STG_E_INVALIDPOINTER
pStm é um ponteiro inválido.
CO_E_NOTINITIALIZED
A função CoInitialize ou OleInitialize não foi chamada no thread atual antes de essa função ser chamada.
CO_E_OBJNOTCONNECTED
O aplicativo de objeto foi desconectado do sistema de comunicação remota (por exemplo, como resultado de uma chamada para a função CoDisconnectObject ).
REGDB_E_CLASSNOTREG
Ocorreu um erro ao ler o banco de dados de registro.
E_NOINTERFACE
O QueryInterface final dessa função para a interface solicitada retornada E_NOINTERFACE.

Comentários

Importante  

Observação de segurança: chamar esse método com dados não confiáveis é um risco à segurança. Chame esse método apenas quando você tiver dados confiáveis.

 
A função CoUnmarshalInterface executa as seguintes tarefas:
  1. Lê do fluxo o CLSID a ser usado para criar uma instância do proxy.
  2. Obtém um ponteiro IMarshal para o proxy que deve fazer a unmarshaling. Se o objeto usar a implementação de marshaling padrão do COM, o ponteiro obtido será para uma instância do objeto proxy genérico. Se o marshaling estiver ocorrendo entre dois threads no mesmo processo, o ponteiro será para uma instância do marshaler de thread livre em processo. Se o objeto fornecer seu próprio código de marshaling, CoUnmarshalInterface chamará a função CoCreateInstance , passando o CLSID lido do fluxo de marshaling. CoCreateInstance cria uma instância do proxy do objeto e retorna um ponteiro de interface IMarshal para o proxy.
  3. Usando o ponteiro da interface IMarshal adquirido, a função chama IMarshal::UnmarshalInterface e, se apropriado, IMarshal::ReleaseMarshalData.
O chamador primário dessa função é o próprio COM, de dentro de proxies de interface ou stubs que cancelam amarcação de um ponteiro de interface. No entanto, há algumas situações em que você pode chamar CoUnmarshalInterface. Por exemplo, se você estiver implementando um stub, sua implementação chamará CoUnmarshalInterface quando o stub receber um ponteiro de interface como um parâmetro em uma chamada de método.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 Professional [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows 2000 Server [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho combaseapi.h (inclua Objbase.h)
Biblioteca Ole32.lib
DLL Ole32.dll

Confira também

Comarshalinterface

IMarshal::UnmarshalInterface