Marshal.GetObjectForIUnknown メソッド
COM オブジェクトを IUnknown インターフェイスへのポインタによって表す型のインスタンスを返します。
Public Shared Function GetObjectForIUnknown( _
ByVal pUnk As IntPtr _) As Object
[C#]
public static object GetObjectForIUnknown(IntPtrpUnk);
[C++]
public: static Object* GetObjectForIUnknown(IntPtrpUnk);
[JScript]
public static function GetObjectForIUnknown(
pUnk : IntPtr) : Object;
パラメータ
- pUnk
IUnknown インターフェイスへのポインタ。
戻り値
指定したアンマネージ COM オブジェクトを表すオブジェクト。
解説
このメソッドは、 IUnknown をマネージ オブジェクトでラップします。これにより、COM コンポーネントの参照カウントがインクリメントされます。COM オブジェクトを表すマネージ オブジェクトに対するガベージ コレクションがランタイムによって実行されると、参照カウントはデクリメントされます。
1 番目のパラメータ (pUnk) は、 IUnknown インターフェイス ポインタを表します。ただし、COM のインターフェイスはすべて直接的または間接的に IUnknown から派生しているので、このメソッドには任意の COM インターフェイスを渡すことができます。 GetObjectForIUnknown が返すオブジェクトはランタイム呼び出し可能ラッパーです。共通言語ランタイムはこれを他のマネージ オブジェクトと同様に管理します。このラッパーの型は汎用の System.__ComObject 型となることもよくあります。これは、ラッパーの型があいまいな場合に使用される隠し型です。COM オブジェクトが IDispatch インターフェイスを実装している限りは、このような汎用な型を遅延バインディングで呼び出すこともできます。同様に、返されたオブジェクトは適切な COM インターフェイスにキャストできます。詳細については、「 ランタイム呼び出し可能ラッパー 」を参照してください。
汎用的なラッパー型ではなく、特定のマネージ クラス型でラップするオブジェクトを使用する場合は、次の要件に従う必要があります。
- COM オブジェクトの IProvideClassInfo インターフェイスを実装する。
- アセンブリ登録ツール (Regasm.exe) を使用して、対象のアセンブリを登録する。
なお、 Marshal.GetTypedObjectForIUnknown メソッドを使用すれば、これらの要件を回避しながら、特定のマネージ クラス型でラップされたオブジェクトを取得することができます。
メモ このメソッドは SecurityAction.LinkDemand を使用して、信頼関係のないコードからの呼び出しを防ぎます。 SecurityPermissionAttribute.UnmanagedCode アクセス許可は、直前の呼び出し元にのみ要求されます。信頼性が一部しか確認されていないコードから呼び出すことができるコードの場合、ユーザー入力を検証せずに Marshal クラスに渡すことは避けてください。 LinkDemand メンバの使用に関する重要な制約事項については、「 Demand と LinkDemand 」を参照してください。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
.NET Framework セキュリティ:
- SecurityPermission (アンマネージ コードを操作するために必要なアクセス許可) SecurityPermissionFlag.UnmanagedCode (関連する列挙体)
参照
Marshal クラス | Marshal メンバ | System.Runtime.InteropServices 名前空間 | AddRef | Release | GetTypedObjectForIUnknown