利用swig,在python中使用C++的类

6 篇文章 0 订阅
1. 下载swig。http://www.swig.org/download.html我是在windows上开发,所以下载的是windows prebuilt版本。

 

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'



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值