HandleRef コンストラクタ
アセンブリ: mscorlib (mscorlib.dll 内)


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 によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


HandleRef プロパティ
HandleRef メソッド

名前 | 説明 | |
---|---|---|
![]() | Equals | オーバーロードされます。 ( ValueType から継承されます。) |
![]() | GetHashCode | このインスタンスのハッシュ コードを返します。 ( ValueType から継承されます。) |
![]() | GetType | 現在のインスタンスの Type を取得します。 ( Object から継承されます。) |
![]() | op_Explicit | 指定した HandleRef オブジェクトのリソースへのハンドルを返します。 |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 ( Object から継承されます。) |
![]() | ToIntPtr | HandleRef オブジェクトの内部整数表現を返します。 |
![]() | ToString | このインスタンスの完全修飾型名を返します。 ( ValueType から継承されます。) |

HandleRef メンバ
プラットフォームの呼び出しを使用して、アンマネージ コードに渡されるリソースへのハンドルを保持しているマネージ オブジェクトをラップします。
HandleRef データ型で公開されるメンバを以下の表に示します。



名前 | 説明 | |
---|---|---|
![]() | Equals | オーバーロードされます。 ( ValueType から継承されます。) |
![]() | GetHashCode | このインスタンスのハッシュ コードを返します。 (ValueType から継承されます。) |
![]() | GetType | 現在のインスタンスの Type を取得します。 (Object から継承されます。) |
![]() | op_Explicit | 指定した HandleRef オブジェクトのリソースへのハンドルを返します。 |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 (Object から継承されます。) |
![]() | ToIntPtr | HandleRef オブジェクトの内部整数表現を返します。 |
![]() | ToString | このインスタンスの完全修飾型名を返します。 (ValueType から継承されます。) |

HandleRef 構造体
アセンブリ: mscorlib (mscorlib.dll 内)


プラットフォーム呼び出しを使用してマネージ オブジェクトを呼び出し、このプラットフォーム呼び出しの後でオブジェクトが他で一切参照されていない場合、ガベージ コレクタがマネージ オブジェクトを終了する可能性があります。これによって、リソースが解放され、ハンドルが無効になり、プラットフォーム呼び出しは失敗します。HandleRef でハンドルをラップすると、プラットフォーム呼び出しが終了するまで、マネージ オブジェクトはガベージ コレクションの対象になることはありません。プラットフォーム呼び出しサービスの説明については、「アンマネージ DLL 関数の処理」を参照してください。
GCHandle と同様、HandleRef 値型は、相互運用マーシャラが認識できる特別な型です。通常の固定されていない GCHandle を使用しても、予期しないガベージ コレクションを防ぐことができますが、HandleRef の動作の方が優れています。プラットフォーム呼び出しの有効期間の間オブジェクトを有効にしておくには HandleRef の使用を推奨しますが、同じ目的で GC.KeepAlive メソッドを使用することもできます。
HandleRef コンストラクタは、ラッパーを表す Object、およびアンマネージ ハンドルを表す IntPtr の 2 つのパラメータを受け取ります。相互運用マーシャラは、ハンドルだけをアンマネージ コードに渡し、呼び出しの有効期間の間ラッパー (HandleRef のコンストラクタの 1 番目のパラメータとして渡される) が有効となるよう保証します。

HandleRef を使用して、1 番目のパラメータに渡されたオブジェクトを有効に保つ方法を次の例に示します。相互運用マーシャラは、ハンドルだけをアンマネージ コードに渡します。
Dim fs As New FileStream("HandleRef.txt", FileMode.Open) Dim hr As New HandleRef(fs, fs.SafeFileHandle.DangerousGetHandle()) Dim buffer As New StringBuilder(5) Dim read As Integer = 0 ' platform invoke will hold reference to HandleRef until call ends LibWrap.ReadFile(hr, buffer, 5, read, 0) Console.WriteLine("Read with struct parameter: {0}", buffer)
FileStream fs = new FileStream("HandleRef.txt", FileMode.Open); HandleRef hr = new HandleRef(fs, fs.SafeFileHandle.DangerousGetHandle()); StringBuilder buffer = new StringBuilder(5); int read = 0; // platform invoke will hold reference to HandleRef until call ends LibWrap.ReadFile(hr, buffer, 5, out read, 0); Console.WriteLine("Read with struct parameter: {0}", buffer);
FileStream^ fs = gcnew FileStream( "HandleRef.txt", FileMode::Open ); HandleRef hr = HandleRef(fs,fs->Handle); StringBuilder^ buffer = gcnew StringBuilder( 5 ); int read = 0; // platform invoke will hold reference to HandleRef until call ends LibWrap::ReadFile( hr, buffer, 5, &read, 0 ); Console::WriteLine( "Read with struct parameter: {0}", buffer );


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 によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


- HandleRefのページへのリンク