【问题标题】:C++ function exported in dll and loaded from C#在 dll 中导出并从 C# 加载的 C++ 函数
【发布时间】:2011-06-16 21:28:54
【问题描述】:

我有 C++:

void __declspec(dllexport) foo(HWND wnd)

在 C# 中

[DllImport("MyDll.dll", CharSet = CharSet.Ansi)]
public static extern void foo(IntPtr wnd);

当我尝试调用它时出现此错误 - 附加信息:无法在 DLL 中找到名为“foo”的入口点。我试图检查 dll 并且我拥有具有休闲定义的函数:

未修饰的 C++ 函数: void cdecl foo(struct HWND *)

我在几个论坛上搜索,似乎这是执行此操作的正确方法...您知道我为什么会出现此运行时错误吗?

【问题讨论】:

标签: c# c++ dll dllimport


【解决方案1】:

您需要禁用 C++ 名称修改。像这样声明你的原生函数:

extern "C" __declspec(dllexport) void foo(HWND wnd)

您也可以使用 dumpbin.exe 实用程序查看 DLL 导出。

【讨论】:

  • 它有效,谢谢!我会在11分钟内接受答案:P
  • 很高兴为您提供帮助。是的,如果你没有源,事情会变得更加痛苦,但既然你有,我现在不会担心。但是,我会查找“C++ name mangling”,以便您知道这里实际发生了什么。在无法编辑源代码的情况下,我会取消删除您的答案 Adam,因为您是对的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-06
  • 2010-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多