在Mono中,您可以将委托从C#传递给C++函数,该函数接受委托作为函数指针。例如,在Windows上的C#中,您可以编译本机C++非托管库,将其链接到C#项目中,并通过C#作为委托传递给它的函数指针来获取C++函数来调用C#函数。
发布于 2012-03-16 12:53:46
在.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);发布于 2012-03-16 12:50:34
一种选择是使用C++/CLI调入C#代码。如果您的C++代码必须保持非托管(本机)状态,那么您应该将C#代码包装在COM组件中,并在C++代码中使用它。
发布于 2012-03-16 12:54:39
这显然是可以做到的--所有CLR主机从一开始就是本机应用程序。您的选择:
托管应用程序中的
https://stackoverflow.com/questions/9731990
复制相似问题