Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过SWIG和Python从第三方.dll共享库访问函数_Python_Dll_Swig_Pyd - Fatal编程技术网

通过SWIG和Python从第三方.dll共享库访问函数

通过SWIG和Python从第三方.dll共享库访问函数,python,dll,swig,pyd,Python,Dll,Swig,Pyd,我从第三方获得了一个DLL,它与他的.lib和.h文件一起交付(假设这些文件是:“test.DLL”、“test.lib”和“test.h”) 这个交付的DLL包含一些我应该从Python脚本访问的函数。 为此,我必须使用SWIG和MSVC2010构建扩展(.pyd)。 (我将第三方文件复制到MSVC项目的目录中) 要对“test.h”文件进行概述,它是这样的(为了简单起见,我只放了一个函数“CreateFile()”,它返回一个文件句柄): 在MSVC项目中,在这个.i文件的“属性”中,我打开

我从第三方获得了一个DLL,它与他的.lib和.h文件一起交付(假设这些文件是:“test.DLL”、“test.lib”和“test.h”)

这个交付的DLL包含一些我应该从Python脚本访问的函数。 为此,我必须使用SWIG和MSVC2010构建扩展(.pyd)。 (我将第三方文件复制到MSVC项目的目录中)

要对“test.h”文件进行概述,它是这样的(为了简单起见,我只放了一个函数“CreateFile()”,它返回一个文件句柄):

在MSVC项目中,在这个.i文件的“属性”中,我打开了“自定义构建工具”->“命令行”,如下所示:

echo PYTHON_INCLUDE: %PYTHON_INCLUDE% 
echo PYTHON_LIB: %PYTHON_LIB% 

rem
rem WARNING!: Use quotes (" ") on path names to avoid errors !
rem

echo on 
echo. 
echo. "%(FullPath)"
echo. 
"%SWIG_PATH%\swig.exe" -c++ -python -I%SWIG_PATH%\lib  -Itest "%(FullPath)"
好的! 当我尝试构建PYD扩展时,出现以下错误:

Error   1   error : Syntax error in input(1).   D:\ADXWorkZone\testSwig\test.h  33  1   myInterface
…但是“test.h”文件没有什么问题。我使用同一个文件(没有任何修改)来实现同一个C++包装器类作为一个经典的DLL,它工作得很好。 项目规格:

Properties -> C/C++ -> General -> Additional Include Directories: $(PYTHON_INCLUDE)
Properties -> Linker -> General -> Output File: _myInterface.pyd
Properties -> Linker -> Input -> Additional Dependencies: $(PYTHON_LIB);test.lib
有人能帮我吗? 任何想法都将不胜感激


谢谢大家!

尝试在界面文件中的其他%include之前添加以下内容

%include <windows.i>
%include

SWIG不会递归到嵌套的include中,这提供了BOOL和_declspec等定义,否则会混淆SWIG。

你就是那个人!非常感谢。它起作用了!伟大的两天的徒劳挣扎。我知道这是从SWIG接口,但我不知道从哪里。现在,我有……:)非常感谢。不客气!如果答案对您有用,请不要忘记选中它。那么,使用头文件、dll文件和swig,我们可以生成python包装器吗?
echo PYTHON_INCLUDE: %PYTHON_INCLUDE% 
echo PYTHON_LIB: %PYTHON_LIB% 

rem
rem WARNING!: Use quotes (" ") on path names to avoid errors !
rem

echo on 
echo. 
echo. "%(FullPath)"
echo. 
"%SWIG_PATH%\swig.exe" -c++ -python -I%SWIG_PATH%\lib  -Itest "%(FullPath)"
Error   1   error : Syntax error in input(1).   D:\ADXWorkZone\testSwig\test.h  33  1   myInterface
Properties -> C/C++ -> General -> Additional Include Directories: $(PYTHON_INCLUDE)
Properties -> Linker -> General -> Output File: _myInterface.pyd
Properties -> Linker -> Input -> Additional Dependencies: $(PYTHON_LIB);test.lib
%include <windows.i>