2014-03-13 91 views
0

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

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

SWIG是否是在这种情况下使用的正确途径?我想在Python中加载这个DLL,所以我可以使用一个函数。从我所有的研究中,它看起来像Python的ctypes不适用于C++ DLL文件,我正试图找到遵循这一步的最佳路线。 Boost.python似乎需要更改底层的C++代码才能使其与Python协同工作。

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

+0

事实证明,我们能够得到的头文件,所以我应该能够得到它与SWIG合作。 – chrcoe

回答

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. 
+0

这就是我最终做的。我说过的每个人,在你说没有头文件的情况下是不可能的,我也不知道更好。我给了它一个镜头,并最终得到这个工作,谢谢! – chrcoe

0

要使用的库(静态或动态),你需要头和库文件。一,.LIB ...

其对C++真的,我认为它同样适用于Python

+0

我想我得出的结论是,SWIG或boost可能会做到这一点,因为这里有关于使用C库通过Python的ctypes模块函数'cdll.LoadLibrary('file.dll'''[ python ctypes](http://docs.python.org/2/library/ctypes.html)也类似于这个问题:http://stackoverflow.com/questions/252417/how-can-i-use-a- dll-from-python – chrcoe

0

痛饮不能没有头文件就可以使用。你唯一的选择是像ctypes一样的库。如果你发现ctypes没有为你做,你找不到替代方案,然后发布一个问题,为什么ctypes不适用于你的情况。