c# - 从托管代码调用非托管方法

标签 c# c++ mono cil reflection.emit

假设我有一个非托管类测试:

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/

相关文章:

c# - c#中的基频+语音检测

sql-server - 如何获取 Mono 的 System.Data.SqlClient 二进制文件?

c# - HttpListenerResponse OutputStream.Write 在我的服务器上非常慢

python - 将 boost::python::object 转换为(非常量)左值

c# - GTKSharp、Pango、设置字体大小古怪

javascript - 查询字符串参数

c# - 通过 foreach 循环将值传递给用户控件

c# - 将大字符串转换为 UTF-8

c++ - 包含引用的对象 vector

c++ - 为什么会发生这个错误?在派生类函数中使用基类函数时