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

本文详细介绍如何使用SWIG在Windows平台上实现C++与Python之间的交互。从下载SWIG开始,逐步介绍编写C++类、创建接口文件、生成Wrap源码、构建DLL及最终在Python环境中调用的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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'



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值