Marshal.GetFunctionPointerForDelegate Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
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
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
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.