C调用Python(传递数字、字符串、list数组(一维、二维),结构体) |
您所在的位置:网站首页 › python函数怎么传入列表 › C调用Python(传递数字、字符串、list数组(一维、二维),结构体) |
一:环境配置
注:我使用的环境:IDLE (Python 3.6 32-bit) ;vs2010 以下环境配置部分详见:混合编程之——C++调用python2.7&python3.5 以python3.6为例: 需要单独将Python36-32下面的,include文件夹里面的头文件和libs文件夹里面的库函数都单独拷贝出来,至于怎么设置,怎么放,咱们慢慢来。 1、新建一个文件夹,取名为test_python36; 2、将Python36-32下面的,include文件夹、libs文件夹都拷贝到test_python36文件夹中,并把libs文件夹中的python36.lib拷贝一份并命名为python36_d.lib放在该文件下(libs下);
4、接下来需要配置项目(C_python)的环境变量 右键项目-》属性 (1)添加头文件 (2)添加库文件 5、生成解决方案,不会报错,但肯定没有结果,因为还没有添加动态链接库文件调用的python原函数。具体做法:在生成的Debug路径下添加调用的python原函数(例如:Test001.py),如下图所示 6、在运行程序过程中遇到的报错和解决办法: (1)Cannot find or open the PDB file问题的解决 详见:http://blog.chinaunix.net/uid-11765716-id-3074932.html (2)无法解析的外部符号 __imp__py_reftotal(或其他) 详见:https://www.jb51.net/article/108588.htm
二:进行C++/C调用Python的代码实现 1、c++ 调用python的过程: 1)初始化Python调用环境 2)加载对应的Python模块 3)加载对应的Python函数 4)将参数转化为Python元组类型 5)调用Python函数并传入参数元组 6)获取返回值 7)根据Python函数的定义解析返回值 注:在C中使用到的部分参数类型参照:详见:https://docs.python.org/3.6/c-api/arg.html C部分: //调用Add函数,传两个int型参数 void Add(){ int x=6,y=8; Py_Initialize(); PyObject * pModule = NULL; PyObject * pFunc = NULL; PyObject *pReturn = NULL; //加载python模块 pModule = PyImport_ImportModule("Test001");//Test001:Python文件名 //加载对应的Python函数 pFunc = PyObject_GetAttrString(pModule, "Add");//Add:Python文件中的函数名 //创建参数: PyObject *pArgs = PyTuple_New(2);//函数调用的参数传递均是以元组的形式打包的,2表示参数个数 PyTuple_SetItem(pArgs, 0, Py_BuildValue("i", x));//0--序号,i表示创建int型变量 PyTuple_SetItem(pArgs, 1, Py_BuildValue("i", y));//1--序号 //返回值 pReturn = PyEval_CallObject(pFunc, pArgs);//调用函数 //将返回值转换为int类型 int result; PyArg_Parse(pReturn, "i", &result);//i表示转换成int型变量 printf("返回的结果result:%d + %d + 3= %d\n",x,y,result); //cout |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |