次の方法で共有


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 オブジェクトのリソースへのハンドルを返します。

適用対象

こちらもご覧ください