SWIG C ++预编译DLL

时间:2014-03-13 12:25:33

标签: python c++ dll swig

我有一个用C ++编写的第三方DLL(没有头文件),我可以从开发人员那里获得函数原型信息,但它是专有的,他不会提供源代码。

我已经浏览过SWIG教程,但我找不到任何指定如何使用SWIG访问任何只有DLL文件的函数的地方。教程中的所有内容都表明我需要有标题,以便SWIG知道函数原型的样子。

SWIG是否适合在这种情况下使用?我试图在Python中加载此DLL,以便我可以使用一个函数。从我的所有研究来看,看起来Python的ctypes不能与C ++ DLL文件一起使用,我试图找到最好的路径来执行此操作。 Boost.python似乎需要更改底层C ++代码以使其与Python一起使用。

总结一下,当我知道函数原型但是没有头文件或源代码时,有没有办法使用SWIG?

3 个答案:

答案 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在你的情况下不可用。