Marshal.GetFunctionPointerForDelegate Methode

Definitie

Overloads

Name Description
GetFunctionPointerForDelegate(Delegate)
Verouderd.

Converteert een gemachtigde naar een functiepointer die kan worden aangeroepen vanuit onbeheerde code.

GetFunctionPointerForDelegate<TDelegate>(TDelegate)

Converteert een gemachtigde van een opgegeven type naar een functiepointer die kan worden aangeroepen vanuit onbeheerde code.

GetFunctionPointerForDelegate(Delegate)

Let op

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

Converteert een gemachtigde naar een functiepointer die kan worden aangeroepen vanuit onbeheerde code.

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);
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
static member GetFunctionPointerForDelegate : Delegate -> nativeint
[<System.Security.SecurityCritical>]
static member GetFunctionPointerForDelegate : Delegate -> nativeint
Public Shared Function GetFunctionPointerForDelegate (d As Delegate) As IntPtr

Parameters

d
Delegate

De gemachtigde die moet worden doorgegeven aan niet-beheerde code.

Retouren

IntPtr

nativeint

Een waarde die kan worden doorgegeven aan onbeheerde code, die op zijn beurt kan worden gebruikt om de onderliggende beheerde gemachtigde aan te roepen.

Kenmerken

Uitzonderingen

De d parameter is een algemene typedefinitie.

De d parameter is null.

Dynamische toewijzing van toegangspunten wordt niet ondersteund in de huidige omgeving.

Opmerkingen

De gemachtigde d wordt geconverteerd naar een functiepointer die kan worden doorgegeven aan onbeheerde code met behulp van de standaardconventie voor aanroepen van platformen. U kunt de oproepconventie instellen door de UnmanagedFunctionPointerAttribute gemachtigde toe te passen.

U moet ervoor zorgen dat de gemachtigde handmatig wordt verzameld door de garbagecollector uit beheerde code. De garbagecollector houdt geen verwijzingen naar onbeheerde code bij. Gebruik KeepAlive dit om te voorkomen dat de gemachtigde wordt verzameld voordat de systeemeigen aanroep is voltooid:

var callback = new MyNativeCallback(MyManagedMethod);
IntPtr fnPtr = Marshal.GetFunctionPointerForDelegate(callback);
NativeMethod(fnPtr);
GC.KeepAlive(callback); // Prevent collection — fnPtr does not root the delegate.

Een P/Invoke die marshals een gemachtigde verwerkt namens KeepAlive de gebruiker:

var callback = new MyNativeCallback(MyManagedMethod);
NativeMethod(callback); // P/Invoke marshals the delegate and keeps it alive for the duration of the call.

Als systeemeigen code de functie-aanwijzer opslaat na de duur van de aanroep, moet u de gemachtigde de hele levensduur ervan rooten, bijvoorbeeld door deze op te slaan in een static veld.

Deze API wordt niet ondersteund in omgevingen die geen dynamische toewijzing van toegangspunten ondersteunen, zoals ProcessDynamicCodePolicy op Windows, execmem off in SELinux en WebAssembly.

Het wordt aanbevolen om functiepointers te gebruiken en UnmanagedCallersOnlyAttribute in plaats daarvan. Functiepointers zijn efficiënter, gemakkelijker te gebruiken en worden ondersteund in alle omgevingen.

Van toepassing op

GetFunctionPointerForDelegate<TDelegate>(TDelegate)

Converteert een gemachtigde van een opgegeven type naar een functiepointer die kan worden aangeroepen vanuit onbeheerde code.

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

Type parameters

TDelegate

Het type gemachtigde dat moet worden geconverteerd.

Parameters

d
TDelegate

De gemachtigde die moet worden doorgegeven aan niet-beheerde code.

Retouren

IntPtr

nativeint

Een waarde die kan worden doorgegeven aan onbeheerde code, die op zijn beurt kan worden gebruikt om de onderliggende beheerde gemachtigde aan te roepen.

Kenmerken

Uitzonderingen

De d parameter is een algemene typedefinitie.

De d parameter is null.

Dynamische toewijzing van toegangspunten wordt niet ondersteund in de huidige omgeving.

Opmerkingen

De gemachtigde d wordt geconverteerd naar een functiepointer die kan worden doorgegeven aan onbeheerde code met behulp van de standaardconventie voor aanroepen van platformen. U kunt de oproepconventie instellen door de UnmanagedFunctionPointerAttribute gemachtigde toe te passen.

U moet ervoor zorgen dat de gemachtigde handmatig wordt verzameld door de garbagecollector uit beheerde code. De garbagecollector houdt geen verwijzingen naar onbeheerde code bij. Gebruik KeepAlive dit om te voorkomen dat de gemachtigde wordt verzameld voordat de systeemeigen aanroep is voltooid:

var callback = new MyNativeCallback(MyManagedMethod);
IntPtr fnPtr = Marshal.GetFunctionPointerForDelegate(callback);
NativeMethod(fnPtr);
GC.KeepAlive(callback); // Prevent collection — fnPtr does not root the delegate.

Een P/Invoke die marshals een gemachtigde verwerkt namens KeepAlive de gebruiker:

var callback = new MyNativeCallback(MyManagedMethod);
NativeMethod(callback); // P/Invoke marshals the delegate and keeps it alive for the duration of the call.

Als systeemeigen code de functie-aanwijzer opslaat na de duur van de aanroep, moet u de gemachtigde de hele levensduur ervan rooten, bijvoorbeeld door deze op te slaan in een static veld.

Deze API wordt niet ondersteund in omgevingen die geen dynamische toewijzing van toegangspunten ondersteunen, zoals ProcessDynamicCodePolicy op Windows, execmem off in SELinux en WebAssembly.

Het wordt aanbevolen om functiepointers te gebruiken en UnmanagedCallersOnlyAttribute in plaats daarvan. Functiepointers zijn efficiënter, gemakkelijker te gebruiken en worden ondersteund in alle omgevingen.

Van toepassing op