swig c 预编译了DLL

SWIG C++ Precompiled DLL

本文关键字:DLL 编译 swig      更新时间:2023-10-16

我有一个第三方DLL(无标题文件),我能够从开发人员那里获取功能原型信息,但它是专有的,他将不会提供源。

我已经通过了SWIG教程,但是我找不到任何地方,指定如何使用SWIG使用DLL文件访问任何功能。教程上的所有内容都表明我需要拥有标题,以便swig知道功能原型的外观。

在这种情况下,Swig是正确使用的正确途径吗?我正在尝试将此DLL加载到Python中,以便我可以使用一个函数。从我所有的研究中,看起来Python的CTYPES都不适合C DLL文件,我正在尝试找到最佳的途径来执行此操作。boost.python似乎需要更改基础C 代码以使其与Python一起使用。

总结一下,当我知道功能原型时,是否有一种方法可以使用SWIG,但是没有标题文件或源代码?

即使没有标头文件,如果您有原型,也可以自己制作一个标题文件,或者直接在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.

要使用库(静态或动态),您需要标题和库文件.a,.lib ...

它适用于C ,我认为Python也是如此

没有标头文件就无法使用。您唯一的选择是像ctypes这样的lib。如果您发现CTYPES不能为您做,并且找不到其他选择,请发布一个问题,说明为什么CTYPES在您的情况下不可用。