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 | |
---|---|---|
VariantWrapper(Object) | Inicializa uma nova instância da classe VariantWrapper do parâmetro System.Object especificado. |
Propriedades
Nome | Descrição | |
---|---|---|
WrappedObject | Obtém o objeto encapsulado pelo objeto VariantWrapper. |
Métodos
Nome | Descrição | |
---|---|---|
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.) |
|
GetType() | ||
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