Nella tabella seguente sono visualizzati esempi di come sia possibile eseguire il marshalling di un delegato gestito su un puntatore a funzione in codice non gestito.
Delegato gestito (C#)
Puntatore a funzione non gestito (C++)
public delegate int EnumDelegate(
IntPtr hwnd, int LParam);
[DllImport("coredll.dll")]
static extern int EnumWindows(
EnumDelegate d,
Int lParm);
public delegate int EnumDelegate(
IntPtr hwnd, int lParam);
[DllImport("coredll.dll")]
static extern int EnumWindows(
[MarshalAs(UnmanagedType.FunctionPtr0]
EnumDelegate d,
Int lParam);