即插即用demo系列——python 调用C++代码


python部分:pycall.py

# coding=gbk

from ctypes import *

clib = cdll.LoadLibrary('/home/linyc/pythonctype/libpyctype.so')
print "完成装载"

path = '/home/'
clib.init(c_char_p(path))
print "完成init"

def testpyctype():
    showstr = 'test'
    number = 123

    # 返回的就是一个c_char_p类型
    retstr = create_string_buffer('\000'*100000)

    ret = clib.process(c_char_p(showstr), number, retstr)
    print 'process status = %s' % ret

    toprintstr = retstr.value

    return toprintstr

if __name__ == '__main__':
    ret = testpyctype()
    print ret

C++部分:proc.cpp

#include <string>
#include <iostream>

using namespace std;

extern "C"
{
void init(char * c_pt_path);
int process(char * c_pt_showstr, int number, char * retstr);

}

// 供给python调用的初始化函数
void init(char * c_pt_path){
	string tmp1 = c_pt_path;
	ETSPATH = tmp1;
}

// 给 python 调用的主函数
int process(char * c_pt_showstr, int number, char * retstr){
	int state = 0;  // 0表示失败
	string showstr  = c_pt_showstr;

	cout<<showstr<<endl;
	cout<<number<<endl;
	
	string ret = "ok";
	strcpy(retstr, ret.c_str());
	state = 1;

	return state; // 1表示成功
}

注意,cpp代码写好后,要再编译好.so库并命名为libpyctype.so,放在和py代码同一个目录下,这样py代码才能调用cpp里的函数

另外,cpp会将函数名给改了以便支持重载,对于提供给py调用的函数,你要特别声明这个函数不要被改名,也就是extern c 。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值