Compartilhar via


IMarshal::GetUnmarshalClass

Windows Mobile SupportedWindows Embedded CE Supported

9/8/2008

Esse método retorna o CLSID que COM usa para localizar o DLL contendo a codificar para o correspondente proxy. COM carrega este DLL para criar um não inicializado instância do proxy.

Syntax

HRESULT GetUnmarshalClass(
  REFIID riid,
  void* pv,
  DWORD dwDestContext,
  void* pvDestContext,
  DWORD mshlflags,
  CLSID* pCid 
);

Parameters

  • riid
    [no] Referência ao identificador da interface para ser empacotado.
  • Vp
    [no] Ponteiro para a interface para ser empacotado; pode ser NULL se o chamador não tiver um ponteiro para a interface desejado.
  • dwDestContext
    [no] Contexto de destino em que a interface especificada deve ser unmarshaled.

    Valores para dwDestContext provenientes de enumeração MSHCTX.

    Unmarshaling pode ocorrer em outro compartimento do atual processo (MSHCTX_INPROC) ou em outro processo no mesmo computador como o atual processo (MSHCTX_LOCAL).

  • pvDestContext
    [no] Reservado para uso futuro; deve ser NULL.
  • mshlflags
    [no] Se os dados ser empacotado é para serem transmitidos voltar para o processo cliente — a maiúsculas e minúsculas Típica — ou gravado em uma tabela global, onde ele pode ser recuperado por múltiplo clientes. Os valores válidos vêm de enumeração de MSHLFLAGS.
  • pCid
    [out] Ponteiro para o CLSID a ser usado para criar um proxy no processo de cliente.

Return Value

Retorna S_OK se bem-sucedido; caso contrário, S_FALSE.

Remarks

Este método é chamado por qualquer codificar no processo de servidor pode ser responsável por empacotamento um ponteiro para uma interface em um objeto.

Este codificar empacotamento é normalmente um stub gerado pelo COM para uma das várias interfaces que podem empacotar um ponteiro para uma interface implementado em um objeto inteiramente diferente. Um exemplo é o IClassFactory interface. Para esta discussão, a codificar responsável empacotamento um ponteiro é chamado o stub empacotamento.

Para criar um proxy para um objeto, COM requer dois pedaços de informações a partir de original objeto: a quantidade de dados a serem gravados para transmitir o empacotamento e o proxy é CLSID.

O stub empacotamento obtém essas duas partes de informações com sucessivas chamadas para CoGetMarshalSizeMax e CoMarshalInterface.

Para determinar se a plataforma oferece suporte a esta interface, consulte Determinando suporte COM APIs.

Notas para chamadores

O stub empacotamento chama implementação do objeto desse método para obter o CLSID para ser usado em criar uma instância do proxy. O cliente, ao receber o CLSID, carrega o DLL listados para ele no Registro sistema.

Não chamar explicitamente esse método se você estiver:

  • Implementar interfaces COM existentes, ou
  • Definir suas interfaces usando o Microsoft Interface Definition Language (MIDL).

Em ambos os casos, o stub automaticamente torna o chamar. Consulte definindo interfaces COM

Se você não estiver usando MIDL para definir sua interface, o stub deve chamar esse método, seja diretamente ou indiretamente, para get de CLSID que COM Library o client-side precisa para criar um proxy para o objeto implementando a interface.

Se o chamador possui um ponteiro para a interface para ser empacotado, ele deve, como uma questão de eficiência, use o parâmetro VP para transmitir que ponteiro. Dessa forma, uma implementação que pode usar tal um ponteiro para determinar o apropriado CLSID para o proxy não é necessário chamar Falha de QueryInterface No próprio.

Se um chamador não tiver um ponteiro para a interface para ser empacotado, ele poderá transmitir NULL.

Notas para Implementers

Chamadas COM GetUnmarshalClass Para obter o CLSID a ser usado para criar um proxy no processo de cliente. O CLSID a ser usado para um proxy é geralmente não que o original objeto (consulte Observações para Implementers para a exceção), mas você vai ter gerado (usando a ferramenta GUIDGEN.EXE) especificamente para o objeto proxy.

Implemente este método para cada objeto que oferece empacotamento para um ou mais das suas interfaces. A codificar responsável empacotamento o objeto grava um transmitir; o CLSID, along with dados de empacotamento, COM extrai a CLSID e dados a partir de transmitir no lado de recebimento.

Se sua implementação proxy consiste em simplesmente de copiar o original todo objeto para o processo cliente, assim, eliminando a necessidade para ENC chamadas para o original objeto, o CLSID retornado poderia ser o mesmo que o original objeto. Essa estratégia, naturalmente, é aconselhável somente para objetos que não deverão a alteração.

Se o parâmetro vp é NULL e sua implementação precisa um ponteiro interface, ele pode chamar IUnknown::QueryInterface Sobre o atual objeto para get-lo. O parâmetro VP existe apenas para melhorar a eficiência.

Para garantir que sua implementação de GetUnmarshalClass Continua a trabalho corretamente como novos contextos destino é com suporte In the future, delegado empacotamento para implementação usar como padrão do COM para todos dwDestContext Valores que sua implementação não identificador.

Ao delegado empacotamento para implementação usar como padrão do COM, chamar o CoGetStandardMarshal função.

Requirements

Header objidl.h, objidl.idl
Library ole32.lib, uuid.lib
Windows Embedded CE Windows CE 3.0 and later
Windows Mobile Windows Mobile Version 5.0 and later

See Also

Reference

CoGetMarshalSizeMax
CoGetStandardMarshal
CoMarshalInterface
IClassFactory
IUnknown::QueryInterface