C++在 dll 中导出并从 C# 加载的函数

发布于 2024-10-14 09:13:11 字数 449 浏览 3 评论 0原文

我在 C++ 中有:

void __declspec(dllexport) foo(HWND wnd)

在 C# 中

[DllImport("MyDll.dll", CharSet = CharSet.Ansi)]
公共静态 extern void foo(IntPtr wnd);

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

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

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

I have in C++:

void __declspec(dllexport) foo(HWND wnd)

And in C#

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

When I'm trying to call it I have this error - Additional information: Unable to find an entry point named 'foo' in DLL. I tried to inspect the dll and I have the function with the fallowing definition:

Undecorated C++ Function:
void cdecl foo(struct HWND *)

I searched on several forums and is seems that this is the right way to do this... Do you know why I have this run time error?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

み青杉依旧 2024-10-21 09:13:11

您需要禁用 C++ 名称修饰。像这样声明您的本机函数:

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

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

You need to disable C++ name mangling. Declare your native function like this:

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

You can use the dumpbin.exe utility to see DLL exports as well.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文