我有一个用C ++编写的第三方DLL(没有头文件),我可以从开发人员那里获得函数原型信息,但它是专有的,他不会提供源代码。
我已经浏览过SWIG教程,但我找不到任何指定如何使用SWIG访问任何只有DLL文件的函数的地方。教程中的所有内容都表明我需要有标题,以便SWIG知道函数原型的样子。
SWIG是否适合在这种情况下使用?我试图在Python中加载此DLL,以便我可以使用一个函数。从我的所有研究来看,看起来Python的ctypes不能与C ++ DLL文件一起使用,我试图找到最好的路径来执行此操作。 Boost.python似乎需要更改底层C ++代码以使其与Python一起使用。
总结一下,当我知道函数原型但是没有头文件或源代码时,有没有办法使用SWIG?
答案 0 :(得分: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.
答案 1 :(得分:0)
要使用库(静态或动态),您需要标题和库文件.a,.lib ...
它适用于c ++,我认为它与Python相同
答案 2 :(得分:0)
没有头文件,不能使用SWIG。你唯一的选择是类似ctypes的lib。如果你发现ctypes没有为你做,你找不到替代方案然后发一个问题,为什么ctypes在你的情况下不可用。