c# - P/调用 C# 到 C++

标签 c# c++ mono pinvoke

我正在尝试学习如何在 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/

相关文章:

c# - MVC 4 "The using block is missing a } character"

C++ 打开一个文件并写入文件的任意位置

c++ - 将 > 0 的元素从 1 个数组移到另一个数组

c++ - 程序因对象 vector 而崩溃

macos - 为什么 ServiceStack Razor FileSystemWatcher 不能在 Mono + Mac OS X 上运行?

php - Multy如何获取Elasticsearch php的样本?

linux - Mono AOT 编译程序的事后调试

c# - 传入的表格数据流远程过程调用协议(protocol)流不正确。此 RPC 请求中提供了太多参数

c# - 正确理解具有相同主机/不同端口和安全性的 CORS

c# - 在 asp.net core 2.1 上使用 Hangfire 发送电子邮件