Marshal.GetDelegateForFunctionPointer Methode

Definition

Überlädt

GetDelegateForFunctionPointer(IntPtr, Type)
Veraltet.

Konvertiert einen nicht verwalteten Funktionszeiger in einen Delegaten.

GetDelegateForFunctionPointer<TDelegate>(IntPtr)

[Wird nur in .NET Framework 4.5.1 und neueren Versionen unterstützt]

Konvertiert einen nicht verwalteten Funktionszeiger in einen Delegaten eines angegebenen Typs.

GetDelegateForFunctionPointer(IntPtr, Type)

Achtung

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

Konvertiert einen nicht verwalteten Funktionszeiger in einen Delegaten.

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

Parameter

ptr
IntPtr

nativeint

Der nicht verwaltete Funktionszeiger, der konvertiert werden soll.

t
Type

Der Typ des zurückzugebenden Delegaten.

Gibt zurück

Delegate

Eine Delegatinstanz, die in den entsprechenden Delegattyp umgewandelt werden kann.

Attribute

Ausnahmen

Der t-Parameter ist weder ein Delegat, noch ist er generisch.

Der ptr-Parameter ist null.

- oder -

Der t-Parameter ist null.

Hinweise

In Den Versionen 1.0 und 1.1 des .NET Framework konnte eine Stellvertretung übergeben werden, die eine verwaltete Methode an nicht verwalteten Code als Funktionszeiger darstellt, sodass der nicht verwaltete Code die verwaltete Methode über den Funktionszeiger aufrufen kann. Es war auch möglich, dass der nicht verwaltete Code diese Funktionszeiger wieder an den verwalteten Code übergeben und der Zeiger ordnungsgemäß an die zugrunde liegende verwaltete Methode aufgelöst wurde.

In den versionen .NET Framework 2.0 und höher können Sie die und GetFunctionPointerForDelegate methoden GetDelegateForFunctionPointer verwenden, um Stellvertretungen in beide Richtungen zu marshallen. Mit GetDelegateForFunctionPointer, ptr wird als eine System.IntPtrimportiert. Eine System.IntPtr kann für eine verwaltete Stellvertretung abgerufen werden, indem sie als Parameter aufgerufen GetFunctionPointerForDelegate und übergeben wird. Sie kann dann innerhalb der nicht verwalteten Methode aufgerufen werden. Beachten Sie, dass der Parameter-Marshaler auch Funktionspunkter auf Stellvertretungen in den versionen .NET Framework 2.0 und höher kann.

ptr wird in eine Stellvertretung konvertiert, die die nicht verwaltete Methode mithilfe der __stdcall Aufrufkonvention unter Windows oder der __cdecl Aufrufkonvention unter Linux und macOS aufruft. Sie können die Anrufkonvention festlegen, indem Sie die UnmanagedFunctionPointerAttribute Stellvertretung anwenden.

Die GetDelegateForFunctionPointer Methode weist die folgenden Einschränkungen auf:

  • Generika werden in Interopszenarien nicht unterstützt.

  • Sie können diese Methode nur für reine nicht verwaltete Funktionszeiger verwenden.

  • Diese Methode kann nicht mit Funktionszeigern verwendet werden, die über C++abgerufen wurden.

Gilt für:

GetDelegateForFunctionPointer<TDelegate>(IntPtr)

[Wird nur in .NET Framework 4.5.1 und neueren Versionen unterstützt]

Konvertiert einen nicht verwalteten Funktionszeiger in einen Delegaten eines angegebenen Typs.

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

Typparameter

TDelegate

Der Typ des zurückzugebenden Delegaten.

Parameter

ptr
IntPtr

nativeint

Der nicht verwaltete Funktionszeiger, der konvertiert werden soll.

Gibt zurück

TDelegate

Eine Instanz vom angegebenen Delegaten.

Attribute

Ausnahmen

Der TDelegate generische Parameter ist kein Delegat, oder es ist ein offener generischer Typ.

Der ptr-Parameter ist null.

Hinweise

Sie können die GetDelegateForFunctionPointer<TDelegate>(IntPtr) GetFunctionPointerForDelegate<TDelegate>(TDelegate) Methoden und Methoden verwenden, um Stellvertretungen in beiden Richtungen zu marschieren.

ptr wird in eine Stellvertretung konvertiert, die die nicht verwaltete Methode mithilfe der __stdcall Aufrufkonvention unter Windows oder der __cdecl Aufrufkonvention unter Linux und macOS aufruft. Sie können die Anrufkonvention festlegen, indem Sie die UnmanagedFunctionPointerAttribute Stellvertretung anwenden.

Die GetDelegateForFunctionPointer<TDelegate>(IntPtr) Methode verfügt über die folgenden Einschränkungen:

  • Generics werden in Interopszenarien nicht unterstützt.

  • Sie können diese Methode nur für reine nicht verwaltete Funktionszeiger verwenden.

  • Diese Methode kann nicht mit Funktionszeigern verwendet werden, die über C++abgerufen wurden.

Gilt für: