C++在 dll 中导出并从 C# 加载的函数
我在 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您需要禁用 C++ 名称修饰。像这样声明您的本机函数:
您也可以使用 dumpbin.exe 实用程序来查看 DLL 导出。
You need to disable C++ name mangling. Declare your native function like this:
You can use the dumpbin.exe utility to see DLL exports as well.