在Mono中,您可以将C#中的委托传递给C++函数,该函数将委托作为函数指针接收.这可以在Windows上的C#中完成,例如,您可以编译本机C++非托管库,将其链接到C#项目并获取C++函数以通过C#作为委托传递给它的函数指针调用C#函数吗?
在.NET中定义委托,然后将其传递给非托管代码.CLR将委托作为函数指针公开,您可以从非托管代码中调用它.
互操作层不知道如何处理C++中的引用.所以你需要将对象公开为指针而不是引用.另外,.NET不知道C++对象是什么(它与System.Object不同).这需要作为IntPtr传递,我认为在.NET中你可以用它做很多事情.
C++回调:
typedef void (*CBFUNC1)(unsigned int, const char*, object&);
typedef object* (*CBFUNC2)(object*, struct _mystruct* );
Run Code Online (Sandbox Code Playgroud)
代表的C#签名将是
delegate void CbFunc1(uint param1, [MarshalAs(UnmanagedType.LPStr)] string
param2, IntPtr param3);
delegate IntPtr CbFunc2(IntPtr param1, ref _mystruct param2);
Run Code Online (Sandbox Code Playgroud)