Compartilhar via


Classe VariantWrapper

 

Dica

The .NET API Reference documentation has a new home. Visit the .NET API Browser on docs.microsoft.com to see the new experience.

Realiza marshaling de dados do tipo VT_VARIANT | VT_BYREF de código gerenciado para código não gerenciado. Essa classe não pode ser herdada.

Namespace:   System.Runtime.InteropServices
Assembly:  mscorlib (em mscorlib.dll)

Hierarquia de Herança

System.Object
  System.Runtime.InteropServices.VariantWrapper

Sintaxe

[SerializableAttribute]
public sealed class VariantWrapper
[SerializableAttribute]
public ref class VariantWrapper sealed 
[<Sealed>]
[<SerializableAttribute>]
type VariantWrapper = class end
<SerializableAttribute>
Public NotInheritable Class VariantWrapper

Construtores

Nome Descrição
System_CAPS_pubmethod VariantWrapper(Object)

Inicializa uma nova instância da classe VariantWrapper do parâmetro System.Object especificado.

Propriedades

Nome Descrição
System_CAPS_pubproperty WrappedObject

Obtém o objeto encapsulado pelo objeto VariantWrapper.

Métodos

Nome Descrição
System_CAPS_pubmethod Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.(Herdado de Object.)

System_CAPS_pubmethod GetHashCode()

Serve como a função de hash padrão.(Herdado de Object.)

System_CAPS_pubmethod GetType()

Obtém o Type da instância atual.(Herdado de Object.)

System_CAPS_pubmethod ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.(Herdado de Object.)

Comentários

A finalidade de VariantWrapper é adicionar um nível de indireção ao empacotamento de um tipo gerenciado para o correspondente VARIANT tipo.

Você pode usar essa classe para encapsular um Object que o marshaler interoperabilidade passa como VT_VARIANT | VT_BYREF. Nas versões 1.0 e 1.1 do .NET Framework, não foi possível realizar marshaling de dados variante do tipo VT_VARIANT | VT_BYREF para código não gerenciado. O empacotador de interoperabilidade passada uma variante do tipo gerenciado (por exemplo, VT_BSTR | VT_BYREF para String, ou VT_I4 | VT_BYREF para Int32), mas não VT_VARIANT | VT_BYREF.

Uma vantagem de usar VT_VARIANT | VT_BYREF tipos variantes é que o tipo de dados pode ser alterado durante uma chamada de método. Por exemplo, você pode passar um VT_VARIANT| VT_BYREF tipo variant que contém uma VT_BSTR e get retornou um tipo variant que contém uma VT_I4 após uma chamada de método. Porque o empacotador de interoperabilidade COM não tem como saber quando passar VT_BSTR | VT_BYREF e quando passar VT_VARIANT | VT_BYREF, que aponta para um tipo variant que contém uma BSTR para parâmetros declarados como VARIANT *, você pode instruir o marshaler usando VariantWrapper.

Observe que a associação inicial não é suportado; Você pode usar VariantWrapper apenas ao chamar InvokeMember ou com uma interface somente de expedição, chamado de forma antecipada associada. Em c#, você também deve usar o ref palavra-chave para especificar ByRef semântica para qualquer parâmetro do tipo VariantWrapper. No Visual Basic, ByRef semântica é adicionada automaticamente para cada chamada de associação tardia implícita. Observe também que o aninhamento VariantWrapper objetos e matrizes de VariantWrapper não há suporte para objetos.

Exemplos

O exemplo de código a seguir demonstra como usar o VariantWrapper classe para encapsular um Object que o marshaler interoperabilidade passa como VT_VARIANT | VT_BYREF.

// Create an instance of an unmanged COM object.
UnmanagedComClass UnmanagedComClassInstance = new UnmanagedComClass();

// Create a string to pass to the COM object.
string helloString = "Hello World!";

// Wrap the string with the VariantWrapper class.
object var = new System.Runtime.InteropServices.VariantWrapper(helloString);

// Pass the wrapped object.
UnmanagedComClassInstance.MethodWithStringRefParam(ref var);
' Create an instance of an unmanged COM object.
Dim UnmanagedComClassInstance As New UnmanagedComClass()

' Create a string to pass to the COM object.
Dim helloString As String = "Hello World!"

' Wrap the string with the VariantWrapper class.
Dim var As Object = New System.Runtime.InteropServices.VariantWrapper(helloString)

' Pass the wrapped object.
UnmanagedComClassInstance.MethodWithStringRefParam(var)

Informações de Versão

Plataforma Universal do Windows
Disponível desde 8
.NET Framework
Disponível desde 1.1
Biblioteca de Classes Portátil
Com suporte no: plataformas portáteis do .NET
Windows Phone
Disponível desde 8.1

Acesso thread-safe

Quaisquer membros estáticos públicos ( Compartilhado no Visual Basic) desse tipo são thread-safe. Não há garantia de que qualquer membro de instância seja thread-safe.

Confira Também

Namespace System.Runtime.InteropServices

Retornar ao início