Marshal.GetFunctionPointerForDelegate Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Überlädt
| Name | Beschreibung |
|---|---|
| GetFunctionPointerForDelegate(Delegate) |
Veraltet.
Konvertiert einen Delegaten in einen Funktionszeiger, der aus nicht verwaltetem Code aufgerufen werden kann. |
| GetFunctionPointerForDelegate<TDelegate>(TDelegate) |
Konvertiert einen Delegaten eines angegebenen Typs in einen Funktionszeiger, der aus nicht verwaltetem Code aufgerufen werden kann. |
GetFunctionPointerForDelegate(Delegate)
- Quelle:
- Marshal.cs
- Quelle:
- Marshal.cs
- Quelle:
- Marshal.cs
- Quelle:
- Marshal.cs
- Quelle:
- Marshal.cs
Achtung
GetFunctionPointerForDelegate(Delegate) may be unavailable in future releases. Instead, use GetFunctionPointerForDelegate<T>(T). For more info, go to http://go.microsoft.com/fwlink/?LinkID=296522
Konvertiert einen Delegaten in einen Funktionszeiger, der aus nicht verwaltetem Code aufgerufen werden kann.
public:
static IntPtr GetFunctionPointerForDelegate(Delegate ^ d);
[System.Obsolete("GetFunctionPointerForDelegate(Delegate) may be unavailable in future releases. Instead, use GetFunctionPointerForDelegate<T>(T). For more info, go to http://go.microsoft.com/fwlink/?LinkID=296522")]
[System.Security.SecurityCritical]
public static IntPtr GetFunctionPointerForDelegate(Delegate d);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Marshalling code for the delegate might not be available. Use the GetFunctionPointerForDelegate<TDelegate> overload instead.")]
public static IntPtr GetFunctionPointerForDelegate(Delegate d);
public static IntPtr GetFunctionPointerForDelegate(Delegate d);
[System.Security.SecurityCritical]
public static IntPtr GetFunctionPointerForDelegate(Delegate d);
[<System.Obsolete("GetFunctionPointerForDelegate(Delegate) may be unavailable in future releases. Instead, use GetFunctionPointerForDelegate<T>(T). For more info, go to http://go.microsoft.com/fwlink/?LinkID=296522")>]
[<System.Security.SecurityCritical>]
static member GetFunctionPointerForDelegate : Delegate -> nativeint
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Marshalling code for the delegate might not be available. Use the GetFunctionPointerForDelegate<TDelegate> overload instead.")>]
static member GetFunctionPointerForDelegate : Delegate -> nativeint
static member GetFunctionPointerForDelegate : Delegate -> nativeint
[<System.Security.SecurityCritical>]
static member GetFunctionPointerForDelegate : Delegate -> nativeint
Public Shared Function GetFunctionPointerForDelegate (d As Delegate) As IntPtr
Parameter
- d
- Delegate
Der Delegat, der an nicht verwalteten Code übergeben werden soll.
Gibt zurück
nativeint
Ein Wert, der an nicht verwalteten Code übergeben werden kann, der wiederum zum Aufrufen des zugrunde liegenden verwalteten Delegaten verwendet werden kann.
- Attribute
Ausnahmen
Der Parameter ist eine generische Typdefinition.
Der Parameter ist .
Dynamische Einstiegspunktzuordnung wird in der aktuellen Umgebung nicht unterstützt.
Hinweise
Der Delegat wird in einen Funktionszeiger konvertiert, der mithilfe der Standardkonvention für Plattformaufrufe an nicht verwalteten Code übergeben werden kann. Sie können die Anrufkonvention festlegen, indem Sie die Stellvertretung anwenden.
Sie müssen den Delegaten manuell daran hindern, vom Garbage Collector aus verwaltetem Code gesammelt zu werden. Der Garbage Collector verfolgt keine Verweise auf nicht verwalteten Code. Wird verwendet , um zu verhindern, dass die Stellvertretung erfasst wird, bevor der systemeigene Aufruf abgeschlossen ist:
var callback = new MyNativeCallback(MyManagedMethod);
IntPtr fnPtr = Marshal.GetFunctionPointerForDelegate(callback);
NativeMethod(fnPtr);
GC.KeepAlive(callback); // Prevent collection — fnPtr does not root the delegate.
Ein P/Invoke, der eine Stellvertretung im Namen des Benutzers marshallt:
var callback = new MyNativeCallback(MyManagedMethod);
NativeMethod(callback); // P/Invoke marshals the delegate and keeps it alive for the duration of the call.
Wenn systemeigener Code den Funktionszeiger über die Dauer des Aufrufs hinaus speichert, rooten Sie den Delegaten für die gesamte Lebensdauer , z. B. durch Speichern in einem Feld.
Diese API wird in Umgebungen nicht unterstützt, die keine dynamische Einstiegspunktzuordnung unterstützen, z. B. für Windows, in SELinux und WebAssembly.
Es wird empfohlen, stattdessen Funktionszeiger zu verwenden. Funktionszeiger sind effizienter, einfacher zu verwenden und werden in allen Umgebungen unterstützt.
Gilt für:
GetFunctionPointerForDelegate<TDelegate>(TDelegate)
- Quelle:
- Marshal.cs
- Quelle:
- Marshal.cs
- Quelle:
- Marshal.cs
- Quelle:
- Marshal.cs
- Quelle:
- Marshal.cs
Konvertiert einen Delegaten eines angegebenen Typs in einen Funktionszeiger, der aus nicht verwaltetem Code aufgerufen werden kann.
public:
generic <typename TDelegate>
static IntPtr GetFunctionPointerForDelegate(TDelegate d);
[System.Security.SecurityCritical]
public static IntPtr GetFunctionPointerForDelegate<TDelegate>(TDelegate d);
public static IntPtr GetFunctionPointerForDelegate<TDelegate>(TDelegate d);
[<System.Security.SecurityCritical>]
static member GetFunctionPointerForDelegate : 'Delegate -> nativeint
static member GetFunctionPointerForDelegate : 'Delegate -> nativeint
Public Shared Function GetFunctionPointerForDelegate(Of TDelegate) (d As TDelegate) As IntPtr
Typparameter
- TDelegate
Der Typ der zu konvertierenden Stellvertretung.
Parameter
- d
- TDelegate
Der Delegat, der an nicht verwalteten Code übergeben werden soll.
Gibt zurück
nativeint
Ein Wert, der an nicht verwalteten Code übergeben werden kann, der wiederum zum Aufrufen des zugrunde liegenden verwalteten Delegaten verwendet werden kann.
- Attribute
Ausnahmen
Der Parameter ist eine generische Typdefinition.
Der Parameter ist .
Dynamische Einstiegspunktzuordnung wird in der aktuellen Umgebung nicht unterstützt.
Hinweise
Der Delegat wird in einen Funktionszeiger konvertiert, der mithilfe der Standardkonvention für Plattformaufrufe an nicht verwalteten Code übergeben werden kann. Sie können die Anrufkonvention festlegen, indem Sie die Stellvertretung anwenden.
Sie müssen den Delegaten manuell daran hindern, vom Garbage Collector aus verwaltetem Code gesammelt zu werden. Der Garbage Collector verfolgt keine Verweise auf nicht verwalteten Code. Wird verwendet , um zu verhindern, dass die Stellvertretung erfasst wird, bevor der systemeigene Aufruf abgeschlossen ist:
var callback = new MyNativeCallback(MyManagedMethod);
IntPtr fnPtr = Marshal.GetFunctionPointerForDelegate(callback);
NativeMethod(fnPtr);
GC.KeepAlive(callback); // Prevent collection — fnPtr does not root the delegate.
Ein P/Invoke, der eine Stellvertretung im Namen des Benutzers marshallt:
var callback = new MyNativeCallback(MyManagedMethod);
NativeMethod(callback); // P/Invoke marshals the delegate and keeps it alive for the duration of the call.
Wenn systemeigener Code den Funktionszeiger über die Dauer des Aufrufs hinaus speichert, rooten Sie den Delegaten für die gesamte Lebensdauer , z. B. durch Speichern in einem Feld.
Diese API wird in Umgebungen nicht unterstützt, die keine dynamische Einstiegspunktzuordnung unterstützen, z. B. für Windows, in SELinux und WebAssembly.
Es wird empfohlen, stattdessen Funktionszeiger zu verwenden. Funktionszeiger sind effizienter, einfacher zu verwenden und werden in allen Umgebungen unterstützt.