Определите делегата в .NET, а затем передайте его своему неуправляемому коду.CLR представит делегата как указатель на функцию, которую вы можете вызвать из неуправляемого кода.
Уровень взаимодействия не знает, как обрабатывать ссылки в C ++.Так что вам нужно выставить объект как указатель, а не как ссылку.Кроме того, .NET не знает, что такое объект C ++ (это не то же самое, что System.Object).Это нужно будет передать как IntPtr, и я не думаю, что вы можете многое сделать с ним в .NET.
C ++ обратные вызовы:
typedef void (*CBFUNC1)(unsigned int, const char*, object&);
typedef object* (*CBFUNC2)(object*, struct _mystruct* );
C # подписи дляделегаты будут
delegate void CbFunc1(uint param1, [MarshalAs(UnmanagedType.LPStr)] string
param2, IntPtr param3);
delegate IntPtr CbFunc2(IntPtr param1, ref _mystruct param2);