假设我有一个非托管类测试:
class Test
{
public:
int SomeMethod(int a, bool b);
};
要创建一个新的测试实例,我会:
Test *test = new Test();
我的目标是嵌入 Mono,以便托管代码可以在特定对象中调用非托管方法(如 Test::SomeMethod
)。我通过将该对象的指针传递给托管方法来表示该对象,如下所示:
void *args[1];
args[0] = &test;
mono_runtime_invoke(init, NULL, args, NULL);
这是被调用的托管方法的样子:
public static void Init(IntPtr test)
{
}
从这里,我如何调用 Test.SomeMethod
?
我考虑过使用发出 CALLI
指令,使用 System.Reflection.Emit
,但是我怎样才能引用指针 test
(Init
的第一个参数)指的是什么?
我不想使用DllImport
。
最佳答案
您可能对 CXXI 感兴趣.它基于您的 C++ header 创建一个托管程序集,并允许您像使用普通托管对象一样处理 C++ 对象。
据我所知,它还没有完成,只能使用 GCC 编译的 C++ 代码。
关于c# - 从托管代码调用非托管方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9498035/