我正在尝试学习如何在 RedHat 上使用 Mono 同时运行 C# 和 C++ 代码。我四处闲逛是为了学习如何让两者一起互操作,以便在我从事更大的项目时受到更多的教育。
我在从 C# 向我的 C++ 代码发出 P/Invoke 调用时遇到了一个问题,并且抛出了一个异常。使用 Mono,我可以毫无问题地获取 C++ 代码来调用 C# 代码。
我希望 C# 调用的 C++ 方法如下。
extern "C"{
void Foobar(){
printf("Hooray!");
}
}
我的 C# 代码使用以下 P/Invoke 行。
[DllImport ("__Internal", EntryPoint="Foobar")]
static extern void Foobar();
在我的 C# 程序中,我调用
Foobar();
在函数中进一步向下。我捕获的异常是 EntryPointNotFound 异常。我可能忽略了一些愚蠢的事情。
我用过 http://www.mono-project.com/Embedding_Mono作为有关如何执行此操作的说明。
任何建议表示赞赏。谢谢,
我
最佳答案
您是否在使用嵌入(即,您构建自己的可执行文件来初始化单声道运行时)?在那种情况下,通常有两种可能性:
- 你打错了
- 编译器/链接器在优化过程中从二进制文件中删除了函数
要检查其中任何一个,请运行:
nm your_program |grep Foobar
并查看具有该名称的符号是否存在于可执行文件 your_program 中。 如果您看到损坏的名称,则表示您的代码中未正确应用 extern "C"。
如果您不使用嵌入,则需要在 DllImport 中使用动态库名称而不是 __Internal(并检查拼写错误和上述链接器优化问题)。
关于c# - P/调用 C# 到 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4043378/