Compartilhar via


Função CoMarshalInterface (combaseapi.h)

Grava em um fluxo os dados necessários para inicializar um objeto proxy em algum processo de cliente.

Sintaxe

HRESULT CoMarshalInterface(
  [in]           LPSTREAM  pStm,
  [in]           REFIID    riid,
  [in]           LPUNKNOWN pUnk,
  [in]           DWORD     dwDestContext,
  [in, optional] LPVOID    pvDestContext,
  [in]           DWORD     mshlflags
);

Parâmetros

[in] pStm

Um ponteiro para o fluxo a ser usado durante o marshaling. Consulte IStream.

[in] riid

Uma referência ao identificador da interface a ser empacotada. Essa interface deve ser derivada da interface IUnknown .

[in] pUnk

Um ponteiro para a interface a ser empacotada. Essa interface deve ser derivada da interface IUnknown .

[in] dwDestContext

O contexto de destino em que a interface especificada deve ser desmarsalada. Os valores possíveis vêm da enumeração MSHCTX. Atualmente, a desmarcação pode ocorrer em outro apartment do processo atual (MSHCTX_INPROC), em outro processo no mesmo computador que o processo atual (MSHCTX_LOCAL) ou em um processo em um computador diferente (MSHCTX_DIFFERENTMACHINE).

[in, optional] pvDestContext

Esse parâmetro é reservado e deve ser NULL.

[in] mshlflags

Os sinalizadores que especificam se os dados a serem empacotados devem ser transmitidos de volta para o processo do cliente (o caso típico) ou gravados em uma tabela global, em que eles podem ser recuperados por vários clientes. Os valores possíveis vêm da enumeração MSHLFLAGS .

Valor retornado

Essa função pode retornar os valores retornados padrão E_FAIL, E_OUTOFMEMORY e E_UNEXPECTED, os valores de erro de acesso ao fluxo retornados por IStream, bem como os valores a seguir.

Código de retorno Descrição
S_OK
O HRESULT foi realizado com êxito.
CO_E_NOTINITIALIZED
A função CoInitialize ou OleInitialize não foi chamada no thread atual antes de essa função ser chamada.

Comentários

A função CoMarshalInterface realiza marshaling da interface referida por riid no objeto cuja implementação IUnknown é apontada por pUnk. Para fazer isso, a função CoMarshalInterface executa as seguintes tarefas:

  1. Consulta o objeto em busca de um ponteiro para a interface IMarshal . Se o objeto não implementar IMarshal, o que significa que ele depende do COM para fornecer suporte de marshaling, CoMarshalInterface obtém um ponteiro para a implementação padrão de IMarshal do COM.
  2. Obtém o CLSID do proxy do objeto chamando IMarshal::GetUnmarshalClass, usando o ponteiro da interface IMarshal retornado.
  3. Grava o CLSID do proxy no fluxo a ser usado para marshaling.
  4. Realiza marshaling do ponteiro da interface chamando IMarshal::MarshalInterface.
A biblioteca COM no processo do cliente chama a função CoUnmarshalInterface para extrair os dados e inicializar o proxy. Antes de chamar CoUnmarshalInterface, procure de volta para a posição original no fluxo.

Se você estiver implementando interfaces COM existentes ou definindo suas próprias interfaces usando a MIDL (Linguagem de Definição de Interface da Microsoft), os proxies e stubs gerados por MIDL chamarão CoMarshalInterface para você. Se você estiver escrevendo seus próprios proxies e stubs, o código proxy e o código stub deverão chamar CoMarshalInterface para realizar marshaling correto de ponteiros de interface. Não é recomendável chamar IMarshal diretamente do proxy e do código stub.

Se você estiver escrevendo sua própria implementação de IMarshal e seu proxy precisar de acesso a um objeto privado, você poderá incluir um ponteiro de interface para esse objeto como parte dos dados gravados no fluxo. Nessas situações, se você quiser usar a implementação de marshaling padrão do COM ao passar o ponteiro da interface, poderá chamar CoMarshalInterface no objeto para fazer isso.

Requisitos

   
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

Counmarshalinterface

IMarshal::MarshalInterface