C调用Python(传递数字、字符串、list数组(一维、二维),结构体)

您所在的位置:网站首页 python函数怎么传入列表 C调用Python(传递数字、字符串、list数组(一维、二维),结构体)

C调用Python(传递数字、字符串、list数组(一维、二维),结构体)

2023-12-22 16:39| 来源: 网络整理| 查看: 265

一:环境配置

注:我使用的环境: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下); 3、打开VS2010,新建一个项目(C_python),选好路径,文件夹test_python36里面的内容如下:

 

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

  2、传递并返回数字

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