ComWrappers Classe

Definição

Importante

Esta API não está em conformidade com CLS.

Classe para gerir wrappers de tipos COM IUnknown.

public ref class ComWrappers abstract
[System.CLSCompliant(false)]
[System.Runtime.Versioning.UnsupportedOSPlatform("android")]
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
[System.Runtime.Versioning.UnsupportedOSPlatform("ios")]
[System.Runtime.Versioning.UnsupportedOSPlatform("tvos")]
public abstract class ComWrappers
[System.CLSCompliant(false)]
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public abstract class ComWrappers
[<System.CLSCompliant(false)>]
[<System.Runtime.Versioning.UnsupportedOSPlatform("android")>]
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
[<System.Runtime.Versioning.UnsupportedOSPlatform("ios")>]
[<System.Runtime.Versioning.UnsupportedOSPlatform("tvos")>]
type ComWrappers = class
[<System.CLSCompliant(false)>]
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
type ComWrappers = class
Public MustInherit Class ComWrappers
Herança
ComWrappers
Derivado
Atributos

Observações

A ComWrappers API fornece suporte para a IUnknown API independente do suporte de interoperabilidade COM interno. A ComWrappers API expõe o suporte mínimo de tempo de execução necessário para que os desenvolvedores substituam a versão interna de maneira eficiente.

Tradicionalmente no tempo de execução, um proxy nativo para objeto gerenciado é chamado de COM Callable Wrapper (CCW), e um proxy gerenciado para um objeto nativo é chamado de Runtime Callable Wrapper (RCW). No entanto, quando usados aqui, esses termos não devem ser confundidos com os recursos internos do mesmo nome (ou seja, CCW e RCW). Ao contrário dos recursos internos, a maior parte da responsabilidade pelo gerenciamento preciso do ciclo de vida, métodos de chamada e organização de argumentos e valores de retorno é deixada para o ComWrappers implementador.

"Suporte mínimo" é definido pelos seguintes recursos:

  1. Mapeamento eficiente entre um objeto gerenciado e um proxy nativo (por exemplo, CCW).
  2. Mapeamento eficiente entre um nativo IUnknown e seu proxy gerenciado (por exemplo, RCW).
  3. Integração com o coletor de lixo através do contrato de interface IReferenceTrackerHost .

Aproveitar isso é um cenário avançado.

Estado do proxy

Esta seção fornece descrições e ilustrações do estado de proxy nativo e gerenciado após sua respetiva criação.

Nas ilustrações a seguir, uma referência forte é representada como uma linha sólida (===) e uma referência fraca é representada como uma linha tracejada (= = =). Os termos "referência forte" e "referência fraca" devem ser interpretados como "prolongamento do tempo de vida" e "não prolongamento do tempo de vida", por oposição a implicar uma aplicação específica.

A ilustração a seguir mostra o estado do objeto gerenciado e do proxy nativo após uma chamada para ComWrappers.GetOrCreateComInterfaceForObject(Object, CreateComInterfaceFlags).

 --------------------                  ----------------------
|   Managed object   |                |     Native proxy     |
|                    |                | Ref count: 1         |
|  ----------------  |                |  ------------------  |
| | Weak reference |=| = = = = = = = >| | Strong reference | |
| |    to proxy    | |<===============|=|    to object     | |
|  ----------------  |                |  ------------------  |
 --------------------                  ----------------------

A próxima ilustração mostra o estado do objeto nativo e do proxy gerenciado após uma chamada para ComWrappers.GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags). O conceito de "identidade" segue as regras para IUnknown.

 ------------------               ------------------
|  Native object   |< = = = = = =|                  |
| Ref count: +1    |             | Mapping from     |
 ------------------              | native identity  |
 ------------------------        | to managed proxy |
|   Managed proxy        |< = = =|                  |
| Created by ComWrappers |        ------------------
|   implementer.        |
| Optional AddRef() on   |
|   native object.      |
 ------------------------

Observe que existem apenas referências fracas do ponto de vista do tempo de execução. Presume-se +1 que a contagem de referência no objeto nativo seja executada pelo criador do proxy gerenciado (ou seja, o ComWrappers implementador) para garantir o tempo de vida associado entre o objeto nativo e seu proxy gerenciado. Há uma referência forte opcional (ou seja, AddRef()) mencionada no proxy gerenciado, que é usado para dar suporte ao cenário (3) mencionado anteriormente. Consulte CreateObjectFlags.TrackerObject. Com esta referência forte opcional, a contagem de referência seria +2.

Construtores

Name Descrição
ComWrappers()

Construtor de instâncias.

Métodos

Name Descrição
ComputeVtables(Object, CreateComInterfaceFlags, Int32)

Calcula a Vtable desejada para obj, respeitando os valores de flags.

CreateObject(IntPtr, CreateObjectFlags, Object, CreatedWrapperFlags)

Cria um objeto gerido para o objeto apontado respeitando externalComObject os valores de flags.

CreateObject(IntPtr, CreateObjectFlags)

Cria um objeto gerido para o objeto que externalComObject aponta para, respeitando os valores de flags.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetIUnknownImpl(IntPtr, IntPtr, IntPtr)

Obtém a implementação IUnknown fornecida em tempo de execução.

GetOrCreateComInterfaceForObject(Object, CreateComInterfaceFlags)

Cria uma representação COM do objeto fornecido que pode ser passada para um ambiente não gerido.

GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags, Object)

Recebe o objeto gerido atualmente registado ou cria um novo objeto gerido e regista-o.

GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags)

Recebe o objeto gerido atualmente registado ou cria um novo objeto gerido e regista-o.

GetOrRegisterObjectForComInstance(IntPtr, CreateObjectFlags, Object, IntPtr)

Obtenha o objeto gerido atualmente registado ou usa o objeto gerido fornecido e regista-o.

GetOrRegisterObjectForComInstance(IntPtr, CreateObjectFlags, Object)

Recebe o objeto gerido atualmente registado ou usa o objeto gerido fornecido e regista-o.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
RegisterForMarshalling(ComWrappers)

Regista uma ComWrappers instância para ser usada como instância global para marshalling em tempo de execução.

RegisterForTrackerSupport(ComWrappers)

Regista uma ComWrappers instância para ser usada como instância global para suporte a rastreadores de referência.

ReleaseObjects(IEnumerable)

Liberta uma coleção de objetos fora da vida útil normal do objeto ou da interface COM.

ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)
TryGetComInstance(Object, IntPtr)

Determina se o objeto gerido especificado é um ComWrapperswrapper gerido -criado e, em caso afirmativo, devolve o ponteiro não gerido enrolado.

TryGetObject(IntPtr, Object)

Determina se o objeto COM especificado é um ComWrapperswrapper não gerido -criado e, em caso afirmativo, devolve o objeto gerido encapsulado.

Aplica-se a