SWIG C++ 到 C# 错误无法找到入口点 SWIGRegisterExceptionCallbacks_xxxx
SWIG c++ to C# error unable to find entry point SWIGRegisterExceptionCallbacks_xxxx
所以我得到了这个简单的 C++ 代码,我尝试使用 swig 3.0.2 包装它以生成等效的 C#。
这是 C++ 代码
myclass.hpp
#ifndef __MYCLASS__
#define __MYCLASS__
class myclass {
public:
int add(int b, int c);
};
#endif
myclass.cpp
#include "myclass.hpp"
int myclass::add(int a, int b) {
return a+b;
}
myclass.i
%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 生成代码,但出现以下错误:
Unable to find an entry point named
'SWIGRegisterExceptionCallbacks_mymodule' in DLL '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
干杯,
所以我得到了这个简单的 C++ 代码,我尝试使用 swig 3.0.2 包装它以生成等效的 C#。
这是 C++ 代码
myclass.hpp
#ifndef __MYCLASS__
#define __MYCLASS__
class myclass {
public:
int add(int b, int c);
};
#endif
myclass.cpp
#include "myclass.hpp"
int myclass::add(int a, int b) {
return a+b;
}
myclass.i
%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 生成代码,但出现以下错误:
Unable to find an entry point named 'SWIGRegisterExceptionCallbacks_mymodule' in DLL '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
干杯,