利用swig,在python中使用C++的类
2015-11-10 10:47
483 查看
1. 下载swig。http://www.swig.org/download.html我是在windows上开发,所以下载的是windows prebuilt版本。
2. 要使用的就是那个swig.exe. 参照例子先写一个C++的类,a.h 和a.cpp。
胡乱写的,用std::string作为参数,结果这个在后面还真遇到了问题。
3 仿照例子写接口文件a.i。
这里一定要注意,用了stl的类作为参数,一定要include相应的.i。否则在python里输入参数时会出现类型错误,类似这种
TypeError: in method 'new_Revert', argument 1 of type 'string'
如果开放namespace, 一定记住要在.i文件里也using namespace.
Swig有专门的文档讲这个:http://www.swig.org/Doc3.0/Library.html#Library_stl_cpp_library
基本涵盖了各种stl的常用类型。
4. 生成wrap源码。
swig.exe -c++ -python a.i
会生成a_wrap.cxx和一个.py文件, myAAA.py
5. 建立一个visual studio win32 dll的project,把a.h a.cpp a_wrap.cxx都加进去,编译。
注意要加上python的头文件和lib,我的是在C:\Python27\include和C:\Python27\libs, 库是python27.lib。如果是安装的python,应该就只有release版。同时请注意是x64的,还是x86的。
6. 一切顺利的话会生成一个dll。将其更名为_myAAA.pyd。注意一定是_myAAA,下划线很重要,因为swig生成的py文件中import _myAAA。否则import myAAA时会出错。
7. 将myAAA.py和_myAAA.pyd放到python可以找到的位置。启动python shell
8. 试试以下代码
会输出
b a
'ba'
2. 要使用的就是那个swig.exe. 参照例子先写一个C++的类,a.h 和a.cpp。
#pragma once #include <string> #include <iostream> #include <vector> using namespace std; class Revert { public: Revert(string a1, string a2); string Output(); private: string m1; string m2; };
#include "a.h" Revert::Revert(string a1, string a2) : m1(a1), m2(a2) { } string Revert::Output() { cout << m2 << " " << m1 << endl; return m2 + m1; }
胡乱写的,用std::string作为参数,结果这个在后面还真遇到了问题。
3 仿照例子写接口文件a.i。
%module myAAA %include "std_string.i" %{ #include "a.h" %} using namespace std; %include "a.h"
这里一定要注意,用了stl的类作为参数,一定要include相应的.i。否则在python里输入参数时会出现类型错误,类似这种
TypeError: in method 'new_Revert', argument 1 of type 'string'
如果开放namespace, 一定记住要在.i文件里也using namespace.
Swig有专门的文档讲这个:http://www.swig.org/Doc3.0/Library.html#Library_stl_cpp_library
基本涵盖了各种stl的常用类型。
4. 生成wrap源码。
swig.exe -c++ -python a.i
会生成a_wrap.cxx和一个.py文件, myAAA.py
5. 建立一个visual studio win32 dll的project,把a.h a.cpp a_wrap.cxx都加进去,编译。
注意要加上python的头文件和lib,我的是在C:\Python27\include和C:\Python27\libs, 库是python27.lib。如果是安装的python,应该就只有release版。同时请注意是x64的,还是x86的。
6. 一切顺利的话会生成一个dll。将其更名为_myAAA.pyd。注意一定是_myAAA,下划线很重要,因为swig生成的py文件中import _myAAA。否则import myAAA时会出错。
7. 将myAAA.py和_myAAA.pyd放到python可以找到的位置。启动python shell
8. 试试以下代码
import myAAA c = myAAA.Revert("a", "b") c.Output()
会输出
b a
'ba'
相关文章推荐
- C++基本数据类型所占字节数
- 【C语言】 实现strcpy
- C++ new失败的处理
- C语言之指针1.1数组
- C语言之指针1.1数组
- C++面向对象操作符重载:算术操作符和关系操作符
- for循环用效率分析(++和--时效率的差异分析)
- 关于C语言break跳出双重循环的小技巧
- 系统调用和库函数
- c++实现mystring
- 统计两整数中不同位数
- C++primer--stack处理括号表达式(顺序容器)
- 排序算法(八):小结
- 在C++工程中main函数之前跑代码的廉价方法
- C++在非面向对象方面的一些特性(基本)
- 排序算法(七):归并排序
- 求平均数函数
- 链表的建立以及增加、删除结点的C语言完整代码
- C++抛出异常时无法捕捉到异常,致使程序崩溃
- C/C++中extern关键字详解