SWIG C++ 预编译 DLL
我有一个第三方的DLL文件(没有头文件),它是用C++写的。我从开发者那里得到了函数的原型信息,但这是专有的,他不愿意提供源代码。
我看过SWIG的教程,但找不到任何说明如何仅通过DLL文件来使用SWIG访问函数的地方。教程里所有的内容都显示我需要有头文件,这样SWIG才能知道函数原型是什么样的。
在这种情况下,SWIG合适吗?我想在Python中加载这个DLL,以便使用其中的一个函数。从我所有的研究来看,Python的ctypes似乎不支持C++的DLL文件,我正在寻找最佳的解决方案。Boost.python似乎需要修改底层的C++代码才能和Python一起使用。
总之,有没有办法在我知道函数原型但没有头文件或源代码的情况下使用SWIG?
3 个回答
0
SWIG是一个工具,但它需要一些头文件才能使用。如果你没有这些头文件,那你可以考虑用像ctypes这样的库。如果你觉得ctypes不适合你的需求,找不到其他替代方案,那就可以发个问题,说明一下为什么在你的情况下ctypes不能用。
0
要使用一个库(无论是静态库还是动态库),你需要一些头文件和库文件,比如 .a 或 .lib 这样的文件。
这对 C++ 是这样,我觉得 Python 也是一样的。
2
即使没有头文件,如果你有函数的原型,你也可以自己创建一个头文件,或者直接在SWIG接口文件中输入这个原型。
比如,如果原型是:
int sum(const std::vector<int>& vint);
那么SWIG接口会是:
%module example
%{
#include <vector>
%}
%include <std_vector.i> # SWIG support
%template() std::vector<int>; # Generate code to support template instance.
int sum(const std::vector<int>& vint); # Generate wrapper for function.