System.Runtime.InteropServices.VariantWrapper Class

Marshals data of type VT_VARIANT | VT_BYREF from managed to unmanaged code. This class cannot be inherited.

See Also: VariantWrapper Members


public sealed class VariantWrapper


The purpose of System.Runtime.InteropServices.VariantWrapper is to add one level of indirection when marshaling a managed type to the corresponding VARIANT type.

You can use this class to wrap an object that the interop marshaler passes as VT_VARIANT | VT_BYREF. In versions 1.0 and 1.1 of the .NET Framework, it was not possible to marshal variant data of type VT_VARIANT | VT_BYREF to unmanaged code. The interop marshaler passed a variant of the managed type (for example, VT_BSTR | VT_BYREF for string, or VT_I4 | VT_BYREF for int), but not VT_VARIANT | VT_BYREF.

One advantage of using VT_VARIANT | VT_BYREF variant types is that the type of data can be changed during a method call. For example, you can pass a VT_VARIANT | VT_BYREF variant type that contains a VT_BSTR and get a variant returned that contains a VT_I4 after a method call. Because the COM interop marshaler has no way of knowing when to pass VT_BSTR | VT_BYREF and when to pass VT_VARIANT | VT_BYREF, which points to a variant that contains a BSTR for parameters declared as VARIANT *, you can instruct the marshaler by using System.Runtime.InteropServices.VariantWrapper.

Note that early binding is not supported; you can use System.Runtime.InteropServices.VariantWrapper only when calling Type.InvokeMember(string, System.Reflection.BindingFlags, System.Reflection.Binder, object, Object[], System.Reflection.ParameterModifier[], System.Globalization.CultureInfo, String[]) or with a Dispatch-only interface called in an early bound fashion. In C#, you must also use the ref keyword to specify ByRef semantics for any parameter of type System.Runtime.InteropServices.VariantWrapper. In Visual Basic, ByRef semantics are added automatically for every implicit late binding call. Also note that nesting System.Runtime.InteropServices.VariantWrapper objects and arrays of System.Runtime.InteropServices.VariantWrapper objects is not supported.


Namespace: System.Runtime.InteropServices
Assembly: mscorlib (in mscorlib.dll)
Assembly Versions: 1.0.5000.0,,