Marshal.GetDelegateForFunctionPointer メソッド

定義

オーバーロード

GetDelegateForFunctionPointer(IntPtr, Type)
互換性のために残されています。

アンマネージ関数ポインターをデリゲートに変換します。

GetDelegateForFunctionPointer<TDelegate>(IntPtr)

[.NET Framework 4.5.1 以降のバージョンでサポート]

アンマネージ関数ポインターを指定した型のデリゲートに変換します。

GetDelegateForFunctionPointer(IntPtr, Type)

注意事項

GetDelegateForFunctionPointer(IntPtr, Type) may be unavailable in future releases. Instead, use GetDelegateForFunctionPointer<T>(IntPtr). For more info, go to http://go.microsoft.com/fwlink/?LinkID=296521

アンマネージ関数ポインターをデリゲートに変換します。

public:
 static Delegate ^ GetDelegateForFunctionPointer(IntPtr ptr, Type ^ t);
[System.Obsolete("GetDelegateForFunctionPointer(IntPtr, Type) may be unavailable in future releases. Instead, use GetDelegateForFunctionPointer<T>(IntPtr). For more info, go to http://go.microsoft.com/fwlink/?LinkID=296521")]
[System.Security.SecurityCritical]
public static Delegate GetDelegateForFunctionPointer (IntPtr ptr, Type t);
public static Delegate GetDelegateForFunctionPointer (IntPtr ptr, Type t);
[System.Security.SecurityCritical]
public static Delegate GetDelegateForFunctionPointer (IntPtr ptr, Type t);
[<System.Obsolete("GetDelegateForFunctionPointer(IntPtr, Type) may be unavailable in future releases. Instead, use GetDelegateForFunctionPointer<T>(IntPtr). For more info, go to http://go.microsoft.com/fwlink/?LinkID=296521")>]
[<System.Security.SecurityCritical>]
static member GetDelegateForFunctionPointer : nativeint * Type -> Delegate
static member GetDelegateForFunctionPointer : nativeint * Type -> Delegate
[<System.Security.SecurityCritical>]
static member GetDelegateForFunctionPointer : nativeint * Type -> Delegate
Public Shared Function GetDelegateForFunctionPointer (ptr As IntPtr, t As Type) As Delegate

パラメーター

ptr
IntPtr

nativeint

変換するアンマネージ関数ポインター。

t
Type

返されるデリゲートの型。

戻り値

Delegate

適切なデリゲート型にキャストできるデリゲート インスタンス。

属性

例外

t パラメーターは、デリゲートでもジェネリックでもありません。

ptr パラメーターが null です。

または

t パラメーターが null です。

注釈

バージョン 1.0 および 1.1 の.NET Frameworkでは、マネージド メソッドを表すデリゲートを関数ポインターとしてアンマネージ コードに渡すことができ、アンマネージ コードは関数ポインターを介してマネージド メソッドを呼び出すことができます。 また、アンマネージ コードがその関数ポインターをマネージド コードに渡すこともでき、ポインターは基になるマネージド メソッドに適切に解決されました。

.NET Framework 2.0 以降のバージョンでは、and GetFunctionPointerForDelegate メソッドをGetDelegateForFunctionPointer使用して、デリゲートを双方向にマーシャリングできます。 ptrGetDelegateForFunctionPointer、としてSystem.IntPtrインポートされます。 マネージド デリゲートの A System.IntPtr は、呼び出して GetFunctionPointerForDelegate パラメーターとして渡すことで取得できます。その後、アンマネージ メソッド内から呼び出すことができます。 パラメーター マーシャラーは、.NET Framework 2.0 以降のバージョンのデリゲートへの関数ポインターをマーシャリングすることもできます。

ptr は、Windows の __stdcall 呼び出し規約、または Linux および macOS の __cdecl 呼び出し規約を使用してアンマネージ メソッドを呼び出すデリゲートに変換されます。 デリゲートに適用 UnmanagedFunctionPointerAttribute することで、呼び出し規約を設定できます。

この GetDelegateForFunctionPointer メソッドには、次の制限があります。

  • 相互運用シナリオでは、ジェネリックはサポートされていません。

  • このメソッドは、純粋なアンマネージ関数ポインターに対してのみ使用できます。

  • このメソッドは、C++ で取得された関数ポインターでは使用できません。

適用対象

GetDelegateForFunctionPointer<TDelegate>(IntPtr)

[.NET Framework 4.5.1 以降のバージョンでサポート]

アンマネージ関数ポインターを指定した型のデリゲートに変換します。

public:
generic <typename TDelegate>
 static TDelegate GetDelegateForFunctionPointer(IntPtr ptr);
[System.Security.SecurityCritical]
public static TDelegate GetDelegateForFunctionPointer<TDelegate> (IntPtr ptr);
public static TDelegate GetDelegateForFunctionPointer<TDelegate> (IntPtr ptr);
[<System.Security.SecurityCritical>]
static member GetDelegateForFunctionPointer : nativeint -> 'Delegate
static member GetDelegateForFunctionPointer : nativeint -> 'Delegate
Public Shared Function GetDelegateForFunctionPointer(Of TDelegate) (ptr As IntPtr) As TDelegate

型パラメーター

TDelegate

返すデリゲートの型。

パラメーター

ptr
IntPtr

nativeint

変換するアンマネージ関数ポインター。

戻り値

TDelegate

指定したデリゲート型のインスタンス。

属性

例外

TDelegate ジェネリック パラメーターはデリゲートでない、またはオープン ジェネリック型です。

ptr パラメーターが null です。

注釈

メソッドとGetFunctionPointerForDelegate<TDelegate>(TDelegate)メソッドをGetDelegateForFunctionPointer<TDelegate>(IntPtr)使用して、両方向のデリゲートをマーシャリングできます。

ptr は、Windows の __stdcall 呼び出し規則、または Linux と macOS の __cdecl 呼び出し規則を使用してアンマネージ メソッドを呼び出すデリゲートに変換されます。 呼び出し規約は、デリゲートに適用 UnmanagedFunctionPointerAttribute することで設定できます。

この GetDelegateForFunctionPointer<TDelegate>(IntPtr) メソッドには、次の制限があります。

  • 相互運用シナリオでは、ジェネリックはサポートされていません。

  • このメソッドは、純粋なアンマネージ関数ポインターにのみ使用できます。

  • このメソッドは、C++ で取得された関数ポインターでは使用できません。

適用対象