Udostępnij za pośrednictwem


Marshal.GetFunctionPointerForDelegate Metoda

Definicja

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

IntPtr

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

IntPtr

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