ComWrappers Classe

Definição

Importante

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

Classe para gerenciar 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

Comentários

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

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

O "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 IUnknown nativo e seu proxy gerenciado (por exemplo, RCW).
  3. Integração com o coletor de lixo por meio do contrato de interface IReferenceTrackerHost .

Aproveitar esse é 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 respectiva criação.

Nas ilustrações a seguir, uma referência forte é retratada como uma linha sólida (===) e uma referência fraca é retratada como uma linha tracejada (= = =). Os termos "referência forte" e "referência fraca" devem ser interpretados como "estendendo o tempo de vida" e "não estendendo o tempo de vida", em vez de implicar uma implementaçã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 da perspectiva do tempo de execução. Supõe-se +1 que a contagem de referência no objeto nativo seja executada pelo criador de 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 é usada para dar suporte ao cenário (3) mencionado anteriormente. Consulte CreateObjectFlags.TrackerObject. Com essa referência forte opcional, o contador de referência seria +2.

Construtores

Nome Description
ComWrappers()

Construtor de instância.

Métodos

Nome Description
ComputeVtables(Object, CreateComInterfaceFlags, Int32)

Calcula a Vtable desejada, objrespeitando os valores de flags.

CreateObject(IntPtr, CreateObjectFlags, Object, CreatedWrapperFlags)

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

CreateObject(IntPtr, CreateObjectFlags)

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

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como a função de hash padrão.

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

Obtém a implementação IUnknown fornecida pelo runtime.

GetOrCreateComInterfaceForObject(Object, CreateComInterfaceFlags)

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

GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags, Object)

Obtém o objeto gerenciado registrado no momento ou cria um novo objeto gerenciado e o registra.

GetOrCreateObjectForComInstance(IntPtr, CreateObjectFlags)

Obtém o objeto gerenciado registrado no momento ou cria um novo objeto gerenciado e o registra.

GetOrRegisterObjectForComInstance(IntPtr, CreateObjectFlags, Object, IntPtr)

Obtenha o objeto gerenciado registrado no momento ou use o objeto gerenciado fornecido e registre-o.

GetOrRegisterObjectForComInstance(IntPtr, CreateObjectFlags, Object)

Obtém o objeto gerenciado registrado no momento ou usa o objeto gerenciado fornecido e o registra.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Objectatual.

(Herdado de Object)
RegisterForMarshalling(ComWrappers)

Registra uma ComWrappers instância a ser usada como a instância global para marshalling no runtime.

RegisterForTrackerSupport(ComWrappers)

Registra uma ComWrappers instância a ser usada como a instância global para o suporte ao rastreador de referência.

ReleaseObjects(IEnumerable)

Libera uma coleção de objetos fora do tempo de vida normal do objeto ou da interface COM.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)
TryGetComInstance(Object, IntPtr)

Determina se o objeto gerenciado especificado é um ComWrapperswrapper gerenciado criado e, em caso afirmativo, retorna o ponteiro não gerenciado encapsulado.

TryGetObject(IntPtr, Object)

Determina se o objeto COM especificado é um ComWrapperswrapper não gerenciado criado e, em caso afirmativo, retorna o objeto gerenciado encapsulado.

Aplica-se a