概述
具体方法网上好多,在此不赘述,只记录踩过的坑
1,C++调用纯Python脚本的坑
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('这里写.py文件所在文件夹的绝对路径')");
//注意是所在文件夹!!!
//变量声明,所有跟Python程序交互的变量都是PyObject*
PyObject* pModule = NULL;
PyObject* pDict = NULL;
PyObject* pFunc = NULL;
PyObject* pResult = NULL;
//加载.py文件
pModule = PyImport_ImportModule("这里写要用的Python脚本文件名,不带.py");
//加载函数
pFunc = PyObject_GetAttrString(pModule, "这里写要加载的函数名,不带括号和参数列表");
//调用函数
PyObject* args = Py_BuildValue("ii", a, b);//把参数转换为Python能看懂的格式
//详细说明参照文章1
pResult = PyEval_CallObject(pFunc, 这里写参数列表,无参数函数写NULL);
//pResult是函数返回值,没有可以直接PyEval_CallObject(pFunc, args);
//返回值转换为C++能看懂的格式
int res = 0;
PyArg_Parse(pResult, "i", &res);//res就是最终返回值
参考文章:https://blog.csdn.net/qq_38275373/article/details/91367372?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162823701616780271577730%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162823701616780271577730&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-91367372.pc_search_result_control_group&utm_term=c%2B%2B%E8%B0%83%E7%94%A8python&spm=1018.2226.3001.4187
2,C++调用import tensorflow的Python脚本
1里面的情况只适用于不带tensorflow的脚本,因为tensorflow涉及到对GPU的调用(根据报错推断的不一定对)
按照1的方法调用tensorflow的话PyImport_ImportModule()返回NULL,解决方法如下图
int argc = 1;
wchar_t* argv[] = { L" " };
PySys_SetArgv(argc, argv);
//pModule = PyImport_ImportModule("callFunction");
第二行可能会报
C2440 “初始化”: 无法从“const wchar_t [2]”转换为“wchar_t *”
解决方法:解决方案资源管理器->C/C++->语言->符合模式,改成否
重新运行显示调用成功
大坑应该不止这俩,边学边发
最后
以上就是傻傻向日葵为你收集整理的C++调用Python的一些大坑的全部内容,希望文章能够帮你解决C++调用Python的一些大坑所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复