Compartilhar via


CoCreateFreeThreadedMarshaler

Windows Mobile SupportedWindows Embedded CE Supported

9/8/2008

Essa função cria um objeto agregável capaz de contexto-dependente empacotamento.

Syntax

HRESULT CoCreateFreeThreadedMarshaler(
  LPUNKNOWN punkOuter,
  LPUNKNOWN* ppunkMarshaler
);

Parameters

  • punkOuter
    [no] Ponteiro para o objeto aggregating do controle IUnknown.
  • ppunkMarshaler
    [out] Endereço do IUnknownvariável * pointer que recebe o ponteiro interface para o empacotador agregável.

Return Value

Essa função suporta o padrão valor de retorno E_OUTOFMEMORY, bem como o seguinte:

  • S_OK
    O empacotador foi criado.

Remarks

O CoCreateFreeThreadedMarshaler função permite que um objeto para empacotar ponteiros interface eficiente entre segmentos no mesmo processo.

Se os objetos fazer não suporte empacotamento interthread, você terá há necessidade chamar essa função. Ela destina-se ao uso por servidores DLL livre-encadeadas que devem ser acessados diretamente por todos os segmentos em um processo, mesmo os segmentos associado com apartments Single-threaded.

Ele personalizada-marshals o ponteiro memória real sobre em outros apartments como um proxy falsa e fornece acesso direto para todos os chamadores, mesmo se não forem segmentadas-livre.

O CoCreateFreeThreadedMarshaler função executa a seguinte tarefas:

  1. Cria um objeto empacotador Free-threaded.
  2. Agrega este empacotador para o objeto especificado pela punkOuter parâmetro. Este objeto normalmente é aquele cujos ponteiros interface são para ser empacotado.

Implementação do objeto de aggregating de IMarshal Deve delegado Falha de QueryInterface Chama para IID_IMarshal para a IUnknown do empacotador Free-threaded. Ao receber um chamar, o empacotador Free-threaded executa a seguinte tarefas:

  1. Verifica o contexto destino especificado pelo CoMarshalInterface da função dwDestContext parâmetro.
  2. Se o contexto destino for MSHCTX_INPROC, copiará o ponteiro interface para transmitir o empacotamento.
  3. Se o contexto destino é qualquer outro valor, localiza ou cria uma instância do empacotador usar como padrão (padrão) de COM e delega empacotamento para ele.

Valores para dwDestContext são provenientes de enumeração de MSHCTX. MSHCTX_INPROC indica que o ponteiro interface deve ser empacotado entre segmentos diferentes no mesmo processo.

Como ambos os segmentos possuem acessar para o mesmo espaço de endereço, o segmento cliente pode excluir a referência o ponteiro diretamente vez de ter para direcionar chamadas para um proxy.

Em todos os outros casos, um proxy é exigido, caso CoCreateFreeThreadedMarshaler Delega o trabalho empacotamento para implementação usar como padrão do COM.

Muita atenção deve ser utilização no usando o CoCreateFreeThreadedMarshaler função.

Isso ocorre porque o desempenho dos objetos que agregado o empacotador Free-threaded é obtido através uma calculado violação das regras de COM, com o risco ever-present de indefinido comportamento, a menos que o objeto opera em determinadas restrições.

As restrições mais importantes são:

  1. Não é possível armazenar um objeto Free-threaded empacotador direcionar ponteiros para interfaces em um objeto que não agregado o empacotador Free-threaded como parte do seu estado.
    Se o objeto estivesse usar direcionar referências para comum agregado Single-threaded objetos, ele pode interromper sua única segmentadas propriedade.
    Se o objeto estivesse usar direcionar referências para comum agregado multi-segmentado objetos, esses objetos podem se comportar de maneiras segmentadas dessa apresentação nenhuma sensibilidade às necessidades de direcionar único agregado clientes.
    De exemplo, esses objetos podem girar novos segmentos e transmitir parâmetros para os segmentos que são referências para comum agregado Single-threaded objetos.
  2. Um objeto empacotador Free-threaded Não é possível mantiverem referências a proxies a objetos em outros apartments. Proxies são confidencial para o modelo de segmento e pode retornar RPC_E_WRONG_THREAD se chamado pelo cliente errado.

Para determinar se a plataforma oferece suporte a essa função, consulte Determinando suporte COM APIs.

Requirements

Header objbase.h
Library ole32.lib
Windows Embedded CE Windows CE 3.0 and later
Windows Mobile Windows Mobile Version 5.0 and later

See Also

Reference

COM Functions
CoMarshalInterThreadInterfaceInStream
CoGetInterfaceAndReleaseStream