Marshal.GetFunctionPointerForDelegate Metoda
Definicja
Ważny
Niektóre informacje dotyczą produktów przedpremierowych, które mogą zostać znacznie zmodyfikowane przed premierą. Microsoft nie udziela żadnych gwarancji, ani wyraźnych, ani domniemanych, dotyczących informacji podanych tutaj.
Przeciążenia
| Nazwa | Opis |
|---|---|
| GetFunctionPointerForDelegate(Delegate) |
Przestarzały.
Konwertuje delegata na wskaźnik funkcji, który można wywołać z niezarządzanego kodu. |
| GetFunctionPointerForDelegate<TDelegate>(TDelegate) |
Konwertuje delegat określonego typu na wskaźnik funkcji, który można wywołać z niezarządzanego kodu. |
GetFunctionPointerForDelegate(Delegate)
- Źródło:
- Marshal.cs
- Źródło:
- Marshal.cs
- Źródło:
- Marshal.cs
- Źródło:
- Marshal.cs
- Źródło:
- Marshal.cs
Ostrożność
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
Konwertuje delegata na wskaźnik funkcji, który można wywołać z niezarządzanego kodu.
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
Parametry
- d
- Delegate
Pełnomocnik, który ma zostać przekazany do niezarządzanego kodu.
Zwraca
nativeint
Wartość, którą można przekazać do niezarządzanego kodu, który z kolei może służyć do wywoływania bazowego zarządzanego delegata.
- Atrybuty
Wyjątki
Parametr jest definicją typu ogólnego.
Parametr jest .
Alokacja dynamicznego punktu wejścia nie jest obsługiwana w bieżącym środowisku.
Uwagi
Delegat jest konwertowany na wskaźnik funkcji, który można przekazać do kodu niezarządzanego przy użyciu domyślnej konwencji wywoływania platformy. Konwencję wywoływania można ustawić, stosując element do delegata.
Należy ręcznie uniemożliwić zbieranie delegata przez moduł odśmiecający elementy od kodu zarządzanego. Moduł odśmiecanie pamięci nie śledzi odwołań do niezarządzanych kodu. Użyj polecenia , aby zapobiec zbieraniu delegata przed ukończeniem wywołania natywnego:
var callback = new MyNativeCallback(MyManagedMethod);
IntPtr fnPtr = Marshal.GetFunctionPointerForDelegate(callback);
NativeMethod(fnPtr);
GC.KeepAlive(callback); // Prevent collection — fnPtr does not root the delegate.
P/Invoke, który marshaluje delegata obsługuje element w imieniu użytkownika:
var callback = new MyNativeCallback(MyManagedMethod);
NativeMethod(callback); // P/Invoke marshals the delegate and keeps it alive for the duration of the call.
Jeśli kod natywny przechowuje wskaźnik funkcji poza czasem trwania wywołania, wykorzenić delegata przez cały okres istnienia — na przykład przez zapisanie go w polu.
Ten interfejs API nie jest obsługiwany w środowiskach, które nie obsługują dynamicznej alokacji punktów wejścia, takich jak w Windows, w seLinux i WebAssembly.
Zaleca się używanie wskaźników funkcji i zamiast tego. Wskaźniki funkcji są wydajniejsze, łatwiejsze do poprawnego użycia i obsługiwane we wszystkich środowiskach.
Dotyczy
GetFunctionPointerForDelegate<TDelegate>(TDelegate)
- Źródło:
- Marshal.cs
- Źródło:
- Marshal.cs
- Źródło:
- Marshal.cs
- Źródło:
- Marshal.cs
- Źródło:
- Marshal.cs
Konwertuje delegat określonego typu na wskaźnik funkcji, który można wywołać z niezarządzanego kodu.
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
Parametry typu
- TDelegate
Typ delegata do konwersji.
Parametry
- d
- TDelegate
Pełnomocnik, który ma zostać przekazany do niezarządzanego kodu.
Zwraca
nativeint
Wartość, którą można przekazać do niezarządzanego kodu, który z kolei może służyć do wywoływania bazowego zarządzanego delegata.
- Atrybuty
Wyjątki
Parametr jest definicją typu ogólnego.
Parametr jest .
Alokacja dynamicznego punktu wejścia nie jest obsługiwana w bieżącym środowisku.
Uwagi
Delegat jest konwertowany na wskaźnik funkcji, który można przekazać do kodu niezarządzanego przy użyciu domyślnej konwencji wywoływania platformy. Konwencję wywoływania można ustawić, stosując element do delegata.
Należy ręcznie uniemożliwić zbieranie delegata przez moduł odśmiecający elementy od kodu zarządzanego. Moduł odśmiecanie pamięci nie śledzi odwołań do niezarządzanych kodu. Użyj polecenia , aby zapobiec zbieraniu delegata przed ukończeniem wywołania natywnego:
var callback = new MyNativeCallback(MyManagedMethod);
IntPtr fnPtr = Marshal.GetFunctionPointerForDelegate(callback);
NativeMethod(fnPtr);
GC.KeepAlive(callback); // Prevent collection — fnPtr does not root the delegate.
P/Invoke, który marshaluje delegata obsługuje element w imieniu użytkownika:
var callback = new MyNativeCallback(MyManagedMethod);
NativeMethod(callback); // P/Invoke marshals the delegate and keeps it alive for the duration of the call.
Jeśli kod natywny przechowuje wskaźnik funkcji poza czasem trwania wywołania, wykorzenić delegata przez cały okres istnienia — na przykład przez zapisanie go w polu.
Ten interfejs API nie jest obsługiwany w środowiskach, które nie obsługują dynamicznej alokacji punktów wejścia, takich jak w Windows, w seLinux i WebAssembly.
Zaleca się używanie wskaźników funkcji i zamiast tego. Wskaźniki funkcji są wydajniejsze, łatwiejsze do poprawnego użycia i obsługiwane we wszystkich środowiskach.