gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:36:10 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com