Python以其简单的语法及众多第三方库的支持,使得运用非常广泛. 但是如何利用Python进行混合调用,调用已完成的*.dll库功能,刚好最近偶尔看到swig这个小工具,能够生成包装后接口文件,使得脚本语言间接调用c/c++库. 一般像java/c#等语言只能调用纯C类库,Swig竟然可以处理C++库,可能内部作了处理,稍候研究
一. 下载 Swig 直接解压即可
二. C代码
// example.h #ifndef _EXAMPLE_H #define _EXAMPLE_H int Add(int a,int b); #endif // example.cpp #include "example.h" int Add( int a,int b ) { return a+b; }
三. 编写接口描述文件,生成python模块
接口说明文件: example.i
%module example %{ #include "example.h" %} %include "example.h"
swig -python example.i
此时会在工程下生成 example.py 和 example_wrap.c 两个文件
四. VC6下编译扩展
1. 建立空的win32动态库工程
2. 将example.h example.c example_wrap.c三个文件添加至工程中
3. 设置Include path: d:\Python27\include, 设置Lib path: d:\Python27\libs
4. 设置输出文件名: _example.pyd ,千万不能忘了下划线,example.py中会默认调用_example这个模块
5. 成功编译release版本后会在目录中生成文件 _example.pyd
五.测试运行
注: _example.pyd和example.py必须在同一目录,否则会找不到模块