Compartir a través de


Clase VariantWrapper

 

Publicado: octubre de 2016

Calcula las referencias de tipo VT_VARIANT | VT_BYREF desde código administrado a código no administrado. Esta clase no puede heredarse.

Espacio de nombres:   System.Runtime.InteropServices
Ensamblado:  mscorlib (en mscorlib.dll)

Jerarquía de herencia

System.Object
  System.Runtime.InteropServices.VariantWrapper

Sintaxis

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

Constructores

Nombre Descripción
System_CAPS_pubmethod VariantWrapper(Object)

Inicializa una nueva instancia de la VariantWrapper clase especificado System.Object parámetro.

Propiedades

Nombre Descripción
System_CAPS_pubproperty WrappedObject

Obtiene el objeto ajustado por el VariantWrapper objeto.

Métodos

Nombre Descripción
System_CAPS_pubmethod Equals(Object)

Determina si el objeto especificado es igual al objeto actual.(Heredado de Object).

System_CAPS_pubmethod GetHashCode()

Sirve como la función hash predeterminada.(Heredado de Object).

System_CAPS_pubmethod GetType()

Obtiene el Type de la instancia actual.(Heredado de Object).

System_CAPS_pubmethod ToString()

Devuelve una cadena que representa el objeto actual.(Heredado de Object).

Comentarios

El propósito de VariantWrapper es agregar un nivel de direccionamiento indirecto al calcular referencias de un tipo administrado correspondiente VARIANT tipo.

Puede utilizar esta clase para encapsular un Object que el contador de referencias de interoperabilidad pasa como VT_VARIANT | VT_BYREF. En las versiones 1.0 y 1.1 de .NET Framework, no era posible calcular las referencias de datos variant de tipo VT_VARIANT | VT_BYREF a código no administrado. El contador de referencias interoperativo pasa una variante del tipo administrado (por ejemplo, VT_BSTR | VT_BYREF para String, o VT_I4 | VT_BYREF para Int32), pero no VT_VARIANT | VT_BYREF.

Una ventaja de usar VT_VARIANT | VT_BYREF tipos variant es que el tipo de datos puede cambiarse durante una llamada al método. Por ejemplo, puede pasar un VT_VARIANT| VT_BYREF tipo variant que contiene un VT_BSTR y get devuelve un tipo variant que contiene un VT_I4 después de una llamada de método. Dado que el contador de referencias de interoperabilidad de COM no tiene ninguna manera de saber cuándo pasar VT_BSTR | VT_BYREF y cuándo pasar VT_VARIANT | VT_BYREF, que señala a una variante que contiene un BSTR para parámetros declaran como VARIANT *, puede indicar el contador de referencias mediante el uso de VariantWrapper.

Tenga en cuenta que no se admite el enlace anticipado; Puede usar VariantWrapper cuando se llama a InvokeMember o con una interfaz de solo envío denominada de forma dependiente temprana. En C#, también debe utilizar el ref (palabra clave) para especificar ByRef semántica para cualquier parámetro de tipo VariantWrapper. En Visual Basic, ByRef semántica se agrega automáticamente para cada llamada de enlace en tiempo de ejecución implícita. Tenga en cuenta también que el anidamiento VariantWrapper objetos y matrices de VariantWrapper objetos no se admite.

Ejemplos

En el ejemplo de código siguiente se muestra cómo utilizar el VariantWrapper clase para encapsular un Object que el contador de referencias de interoperabilidad pasa 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)

Información de versión

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 1.1
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Windows Phone
Disponible desde 8.1

Seguridad para subprocesos

Cualquier miembro ( Compartido en Visual Basic) estático público de este tipo es seguro para subprocesos. No se garantiza que los miembros de instancia sean seguros para subprocesos.

Ver también

Espacio de nombres System.Runtime.InteropServices

Volver al principio