Marshal.GetFunctionPointerForDelegate Method (System.Runtime.InteropServices) (original) (raw)
Source:
Source:
Source:
Source:
Converts a delegate into a function pointer that is callable from unmanaged 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
The delegate to be passed to unmanaged code.
Returns
A value that can be passed to unmanaged code, which, in turn, can use it to call the underlying managed delegate.
Attributes
Exceptions
The d
parameter is a generic type definition.
Dynamic entrypoint allocation is not supported in the current environment.
Remarks
The delegate d
is converted to a function pointer that can be passed to unmanaged code using the default platform calling convention. You can set the calling convention by applying the UnmanagedFunctionPointerAttribute to the delegate.
You must manually keep the delegate from being collected by the garbage collector from managed code. The garbage collector does not track references to unmanaged code.
This API is unsupported in environments that don't support dynamic entry-point allocation, such as ProcessDynamicCodePolicy
on Windows, execmem off
in SELinux, and WebAssembly.
It is recommended to use function pointers and UnmanagedCallersOnlyAttribute instead. Function pointers are more efficient, easier to use correctly, and supported in all environments.