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端还是很合理的
记住这些应该够用了。
嗯呢。