SWIG c++ 到 C# 错误找不到入口点SWIGRegisterExceptionCallbacks_xxxx



所以我得到了这个简单的C++代码,我尝试使用 swig 3.0.2 包装它来生成 C# 等效项。

所以这是 c++ 代码

我的班级.hpp

#ifndef __MYCLASS__
#define __MYCLASS__
class myclass {
public:
int add(int b, int c);
};
#endif

我的班级.cpp

#include "myclass.hpp"
int myclass::add(int a, int b) {
return a+b;
}

我的类

%module mymodule
%{
#include "myclass.hpp"
%}
%include "myclass.hpp"

所以这是 swig 命令

swig -csharp -c++ -outdir csharp myclass.i

这是使用 MinGW 的编译命令

g++ -shared -I./ myclass_wrap.cxx myclass.cpp -o mymodule.dll

因此,然后我尝试在控制台应用程序中通过 swig 使用生成代码,并收到以下错误:

找不到名为 DLL "mymodule"中的"SWIGRegisterExceptionCallbacks_mymodule"。

所以它正在正确加载 mymodule.dll但找不到看起来很奇怪的SWIGRegisterExceptionCallbacks_mymodule......它存在于 myclass_wrap.cxx 中,似乎是正确的导出关键字__declspec(dllexport)

感谢您的帮助,

干杯

所以我找到了这个问题,所以遇到同样问题的其他人可以有解决方案。

向编译器添加-add-stdcall-alias修复了此问题:

g++ -shared -I./ myclass_wrap.cxx myclass.cpp -o mymodule.dll -add-stdcall-alias

使用 DLL 资源管理器查看器软件,我注意到函数以MyFunctionName@XX结尾,我相信这会导致 entrynotfoundexception,因为它正在寻找MyFunctionName而不是MyFunctionName@XX

因此,swig 用__stdcall生成了 c 代码,MinGW 在__stdcall时生成了这些MyFunctionName@XX

更多信息可以在这里找到:http://wyw.dcweb.cn/stdcall.htm

干杯

相关内容

  • 没有找到相关文章

最新更新