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 |
---|---|
|
O HRESULT foi realizado com êxito. |
|
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:
- 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.
- Obtém o CLSID do proxy do objeto chamando IMarshal::GetUnmarshalClass, usando o ponteiro da interface IMarshal retornado.
- Grava o CLSID do proxy no fluxo a ser usado para marshaling.
- Realiza marshaling do ponteiro da interface chamando IMarshal::MarshalInterface.
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 |