服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - 如何在C++中调用python代码你知道吗

如何在C++中调用python代码你知道吗

2022-08-03 15:38yangtuanzi1118 C/C++

这篇文章主要为大家介绍了C++中调用python代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

一、环境设置

windows

VS2015

python的话用的是acaconda自带的python环境,不同版本的acaconda自带的python不同,我的是python3.6(这一步很重要,如果使用acaconda创建的虚拟环境的python,可能会不成功)

二、VS项目中设置

(1)首先在acaconda中找到include文件夹和libs文件夹,如图所示

如何在C++中调用python代码你知道吗

然后右击C++项目,选择属性,点击VC++目录,然后在包含目录中添加include文件夹,在库目录中添加libs文件夹

如何在C++中调用python代码你知道吗

(2)点击链接器,然后输入,附加依赖项,添加python36_d.lib的路径

如何在C++中调用python代码你知道吗

因为配置为Debug,所以是添加python36_d.lib,而不是python36.lib。如果没有这个文件,直接复制python36.lib,然后命名为python36_d.lib即可。如图所示

如何在C++中调用python代码你知道吗

(3)python代码

想要在C++代码中调用python中的vsdemo.py的max函数,首先python代码如图所示

?
1
2
3
4
5
def max(a,b):
    if a>b:
        return a
    else:
        return b

C++代码如图所示

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#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代码你知道吗

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注服务器之家的更多内容!

原文链接:https://blog.csdn.net/yangtuanzi1118/article/details/122134428

延伸 · 阅读

精彩推荐
  • C/C++C++删除指定文件夹下N天及之前日志文件的方法

    C++删除指定文件夹下N天及之前日志文件的方法

    这篇文章主要介绍了C++删除指定文件夹下N天及之前日志文件的方法,涉及C++针对时间判断及文件操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考...

    清清飞扬10752021-03-15
  • C/C++C++实现LeetCode(56.合并区间)

    C++实现LeetCode(56.合并区间)

    这篇文章主要介绍了C++实现LeetCode(56.合并区间),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...

    Grandyang8202021-11-29
  • C/C++C++ explicit关键字的使用详解

    C++ explicit关键字的使用详解

    这篇文章主要介绍了C++ explicit关键字的使用详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...

    一世流离5822022-01-04
  • C/C++有关C++继承与友元、继承与类型转换详解

    有关C++继承与友元、继承与类型转换详解

    下面小编就为大家带来一篇有关C++继承与友元、继承与类型转换详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看...

    C++教程网7922021-04-27
  • C/C++C++遍历文件夹下的所有文件

    C++遍历文件夹下的所有文件

    数据分多个文件存储,读取数据就需要对多个文件进行操作。下面通过实例代码给大家讲解C++遍历文件夹下的所有文件,感兴趣的的朋友一起看看吧...

    CSDNwei9302021-05-27
  • C/C++Qt使用QPainter绘制3D立方体

    Qt使用QPainter绘制3D立方体

    这篇文章主要为大家详细介绍了Qt使用QPainter绘制3D立方体,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    龚建波6942021-09-24
  • C/C++VC中Tab control控件的用法详细解析

    VC中Tab control控件的用法详细解析

    以下是对VC中Tab control控件的用法进行了详细的介绍,需要的朋友可以过来参考下哦...

    C语言教程网7092020-12-28
  • C/C++C语言游戏之猜数字

    C语言游戏之猜数字

    这篇文章主要为大家详细介绍了C语言游戏之猜数字,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    大概叫做TL叭7642021-08-15