python 调用C/C++,记录一下以免自己忘了

1、利用python自带的ctypes模块

2、在C/C++代码中,如果要被python调用代码是C++代码,那么在被调用的地方使用extern “C”,按照c语言的方式进行编译,python是不能直接调用C++代码的,如果是纯C语言代码,则不需要使用extern “C”。

3、将被调用的.c/.cpp文件编译成动态库。

g++ -shared -fpic  xxx.cpp -o libxxx.so  //纯C代码用也可以使用gcc

4、例子:

头文件test.h:

#include <iostream>
using namespace std;

class Test
{
public:
	Test();
	virtual ~Test();
	void testing(int num);
private:
	int m_test_num;
};

源文件test.cpp:

#include "test.h"


void Test::testing(int num)
{
	m_test_num = num;
	cout<<m_test_num<<endl;;
}

Test::Test():m_test_num(999999)
{

}

Test::~Test()
{
	m_test_num = 0;
}


extern "C"
{
void show(int num)
{
	Test tes;
	tes.testing(num);
	cout<<"testing success"<<endl;
}
}

到了这里别忘了把C/C++编译成动态库。

python 脚本:

from ctypes import *

def tesing_call_cpp():
    CPP_Function = cdll.LoadLibrary("/xxx/xxx/xxx/xxx/libtest.so") #/xxx/xxx/xxx/xxx是路径
    CPP_Function.show(c_int(99999)) #此处的main()函数就是CPP文件中的main函数,99999需要强转为 
                                  #int不然可能会出现入参类型不匹配的问题,c_int是python关键字

tesing_call_cpp()

运行结果:

99999
testing success

对于调用C/C++中的全局变量问题,没找到方法,现在想到的只能用一个接口将全局变量暴漏给python端,反正C/C++代码也是以动态库的形式给python端调用,用接口的形式把全局变量暴漏给python端还是很合理的

记住这些应该够用了。

嗯呢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值