一、环境设置
windows
VS2015
python的话用的是acaconda自带的python环境,不同版本的acaconda自带的python不同,我的是python3.6(这一步很重要,如果使用acaconda创建的虚拟环境的python,可能会不成功)
二、VS项目中设置
(1)首先在acaconda中找到include文件夹和libs文件夹,如图所示
然后右击C++项目,选择属性,点击VC++目录,然后在包含目录中添加include文件夹,在库目录中添加libs文件夹
(2)点击链接器,然后输入,附加依赖项,添加python36_d.lib的路径
因为配置为Debug,所以是添加python36_d.lib,而不是python36.lib。如果没有这个文件,直接复制python36.lib,然后命名为python36_d.lib即可。如图所示
(3)python代码
想要在C++代码中调用python中的vsdemo.py的max函数,首先python代码如图所示
def max(a,b):
if a>b:
return a
else:
return b
C++代码如图所示
#include <iostream>
#include<python.h>
#include"stdio.h"
using namespace std;
int main()
{
Py_Initialize();//使用python之前,要调用Py_Initialize();这个函数进行初始化
if (!Py_IsInitialized())
{
printf("初始化失败!");
return 0;
}
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./')");//这一步很重要,修改Python路径
PyObject* pModule = NULL;//声明变量
PyObject* pFunc = NULL;// 声明变量
pModule = PyImport_ImportModule("vsdemo");//这里是要调用的文件名vsdemo.py
if (pModule == NULL)
{
cout << "没找到" << endl;
}
pFunc = PyObject_GetAttrString(pModule, "max");//这里是要调用的函数名max
PyObject* pParams = Py_BuildValue("(ss)", "3", "4");//两个字符串参数
char* result;
PyObject* pRet = PyObject_CallObject(pFunc, pParams);//调用函数 pRet是得到的结果
int res = 0;
PyArg_Parse(pRet, "s", &result);//转换结果的返回类型
cout << "res:" << result << endl;//输出结果
system("pause");
Py_Finalize();//调用Py_Finalize,这个根Py_Initialize相对应的。
return 0;
}
同时需要把python代码,即vsdemo.py文件,放到c++项目文件中,然后再运行
三、可能会出现的问题
(1)可能会出现找不到python36.dll的错误,可以从acaconda中找到该文件,复制到c++项目文件中即可,如图所示
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程学习网的更多内容!
沃梦达教程
本文标题为:如何在C++中调用python代码你知道吗


猜你喜欢
- 详解C语言中sizeof如何在自定义函数中正常工作 2023-04-09
- C语言详解float类型在内存中的存储方式 2023-03-27
- C语言qsort()函数的使用方法详解 2023-04-26
- Easyx实现扫雷游戏 2023-02-06
- 我应该为我的项目使用相对包含路径,还是将包含目录放在包含路径上? 2022-10-30
- ubuntu下C/C++获取剩余内存 2023-09-18
- C++ 数据结构超详细讲解顺序表 2023-03-25
- C语言手把手带你掌握带头双向循环链表 2023-04-03
- Qt计时器使用方法详解 2023-05-30
- c++ const 成员函数,返回一个 const 指针.但是返回的指针是什么类型的 const? 2022-10-11