HandleRef 構造体

定義

プラットフォーム呼び出しを使用してアンマネージド コードに渡されるリソースへのハンドルを保持しているマネージド オブジェクトをラップします。

public value class HandleRef
public readonly struct HandleRef
public struct HandleRef
[System.Runtime.InteropServices.ComVisible(true)]
public struct HandleRef
type HandleRef = struct
[<System.Runtime.InteropServices.ComVisible(true)>]
type HandleRef = struct
Public Structure HandleRef
継承
HandleRef
属性

注釈

重要

.NET Framework 2.0 以降では、クラスのHandleRef機能は、クラスとその派生クラス、およびクラスによってCriticalHandle置き換えられましたSafeHandle

プラットフォーム呼び出しを使用してマネージド オブジェクトを呼び出し、そのオブジェクトがプラットフォーム呼び出しの呼び出し後に他の場所で参照されていない場合は、ガベージ コレクターがマネージド オブジェクトを最終処理できます。 このアクションにより、リソースが解放され、ハンドルが無効になり、プラットフォーム呼び出しが失敗します。 ハンドルをラップして HandleRef 、プラットフォーム呼び出しが完了するまでマネージド オブジェクトがガベージ コレクションされないことを保証します。 プラットフォーム呼び出しサービスの詳細については、「 アンマネージド DLL 関数の使用」を参照してください。

値型 ( HandleRef 例: GCHandle) は、相互運用マーシャラーによって認識される特殊な型です。 また、通常の固定されていない GCHandle 場合でも、ガベージ コレクションが時間を取らなくなりますが HandleRef 、パフォーマンスが向上します。 プラットフォーム呼び出しの間、オブジェクトを存続させるために使用 HandleRef することをお勧めしますが、同じ目的でこのメソッドを GC.KeepAlive 使用することもできます。

コンストラクターは HandleRef 、ラッパーを Object 表すパラメーターと IntPtr アンマネージ ハンドルを表す 2 つのパラメーターを受け取ります。 相互運用マーシャラーはハンドルのみをアンマネージ コードに渡し、呼び出しの間、ラッパー (コンストラクターに最初の HandleRefパラメーターとして渡される) が有効なままであることを保証します。

コンストラクター

HandleRef(Object, IntPtr)

ラップするオブジェクトと、アンマネージ コードで使用するリソースへのハンドルを指定して、HandleRef クラスの新しいインスタンスを初期化します。

プロパティ

Handle

リソースへのハンドルを取得します。

Wrapper

リソースへのハンドルを保持しているオブジェクトを取得します。

メソッド

ToIntPtr(HandleRef)

HandleRef オブジェクトの内部整数表現を返します。

演算子

Explicit(HandleRef to IntPtr)

指定した HandleRef オブジェクトのリソースへのハンドルを返します。

適用対象

こちらもご覧ください