VariantWrapper クラス
アセンブリ: mscorlib (mscorlib.dll 内)


VariantWrapper の目的は、マネージ型を対応する VARIANT 型にマーシャリングするときに間接操作のレベルを 1 つ追加することです。
このクラスを使用すると、相互運用マーシャラが VT_VARIANT | VT_BYREF として渡す Object をラップできます。.NET Framework Version 1.0 および 1.1 では、VT_VARIANT | VT_BYREF 型のバリアント データをアンマネージ コードにマーシャリングできませんでした。相互運用マーシャラは、マネージ型のバリアント (たとえば、String の VT_BSTR | VT_BYREF、または Int32 の VT_I4 | VT_BYREF) は渡しましたが、VT_VARIANT | VT_BYREF は渡しませんでした。
VT_VARIANT | VT_BYREF バリアント型を使用する利点の 1 つは、メソッド呼び出し時にデータの型を変更できることです。たとえば、VT_BSTR を格納する VT_VARIANT| VT_BYREF バリアント型を渡し、メソッド呼び出し後に VT_I4 を格納するバリアントを取得できます。COM 相互運用マーシャラは、VARIANT * として宣言されているパラメータの BSTR を格納するバリアントを指す VT_BSTR | VT_BYREF と VT_VARIANT | VT_BYREF を渡すタイミングを知る手段がないため、VariantWrapper を使用してマーシャラに指示できます。
事前バインディングはサポートされません。VariantWrapper を使用できるのは、InvokeMember を呼び出す場合や、事前バインディングのような方法で呼び出されたディスパッチ専用インターフェイスを使用する場合だけです。C# では、ref キーワードを使用して VariantWrapper 型の任意のパラメータに ByRef セマンティクスを指定する必要もあります。Visual Basic では、すべての暗黙の遅延バインディング呼び出しに ByRef セマンティクスが自動的に追加されます。また、VariantWrapper オブジェクトや VariantWrapper オブジェクトの配列は入れ子にできません。

VariantWrapper クラスを使用して、相互運用マーシャラが VT_VARIANT | VT_BYREF として渡す Object をラップする方法を次のコード例に示します。
' 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)
// 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);

System.Runtime.InteropServices.VariantWrapper


Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


- VariantWrapper クラスのページへのリンク