百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Visual Studio2022+Python3.11实现C++调用python接口

off999 2024-10-17 11:46 74 浏览 0 评论

查了一些资料,不是报这个错,就是报哪个错,没有找到和我安装的环境的一致的案例,于是将自己的摸索分享出来。

一、环境准备

1、Visual Studio 2022,下载地址:https://visualstudio.microsoft.com/zh-hans/downloads/

2、Python版本是3.11,下载地址:https://www.python.org/downloads/

3、安装Visual Studio 2022和Python3.11

安装过程简单,此处不再赘述,我们的重点是看如何实现接口调用的。

二、配置Visual Studio 2022

安装好环境后,使用Visual Studio 2022创建一个新项目,我这里取名c++python。需要配置3个地方:

1、右击项目名称-->属性,选择VC++目录,根据python安装路径,配置包含目录库目录。python安装路径怎么查看?打开cmd,输入python回车,使用如下两个命令即可看到python路径。

>>> import sys

>>> sys.path

将python安装路径下的include文件夹和libs文件夹复制到刚才新建的项目c++python目录下,配置如图所示:

2、右击项目名称-->属性,选择C/C++下的常规,配置附加包含目录,加上项目中include的路径,如图所示:

3、右击项目名称-->属性,选择链接器下的输入,配置附加依赖项,将项目中的libs目录中python311.lib复制一份,改名为python311_d.lib,附加依赖项的内容填写C:\Users\source\repos\c++python\libs\python311_d.lib;如图所示:

三、编写python代码和C++代码

1. 首先,创建一个名为test_python.py的Python文件,内容如下:

def add(a, b):
    return a + b

2. 然后,创建一个名为main.cpp的C++文件,内容如下:

#include <iostream>
#include <Python.h>

int main() 
{
    /*初始化python*/
    Py_Initialize();

    /*初始化python系统文件路径,否则加载不到要调用的main.py文件*/
    PyRun_SimpleString("import sys");
    PyRun_SimpleString("sys.path.append('./')");

    /*加载要调用的python文件名称,当前测试文件名称:test_python.py*/
    PyObject* pName = PyUnicode_DecodeFSDefault("test_python");

    PyObject* pModule = PyImport_Import(pName);

    Py_XDECREF(pName);

    if (pModule != NULL) 
    {
        /*加载python模块中的函数*/
        PyObject* pFunc = PyObject_GetAttrString(pModule, "add");

        if (PyCallable_Check(pFunc)) 
        {
            /*给pythonm模块中的函数add传递2个参数,以元组的形式传递*/
            PyObject* pArgs = PyTuple_New(2);

            /*给add函数传递第一个参数6*/
            PyTuple_SetItem(pArgs, 0, PyLong_FromLong(6));
            /*给add函数传递第二个参数10*/
            PyTuple_SetItem(pArgs, 1, PyLong_FromLong(10));
            /*C++的python接口调用add函数,返回计算结果*/
            PyObject* pValue = PyObject_CallObject(pFunc, pArgs);

            Py_XDECREF(pArgs);

            if (pValue != NULL) 
            {
                /*打印计算结果*/
                std::cout << "\n " << std::endl;
                std::cout << "Result of call: " << PyLong_AsLong(pValue) << std::endl;
                std::cout << "\n " << std::endl;

                Py_XDECREF(pValue);

            }
            else 
            {
                PyErr_Print();
            }
        }
        else 
        {
            if (PyErr_Occurred()) 
            {
                PyErr_Print();
            }

            fprintf(stderr, "Cannot find function \"add\"");
        }

        Py_XDECREF(pFunc);

        Py_XDECREF(pModule);
    }
    else 
    {
        PyErr_Print();

        fprintf(stderr, "Failed to load \"%s\"", "test");

        return 1;
    }

    /*结束python初始化*/
    Py_Finalize();

    return 0;
}

test_python.py和main.cpp在同一目录,如图所示:

3. 编译

1>正在生成代码

1>Previous IPDB not found, fall back to full compilation.

1>All 16 functions were compiled because no usable IPDB/IOBJ from previous compilation was found.

1>已完成代码的生成

1>c++python.vcxproj -> C:\Users\source\repos\c++python\x64\Release\c++python.exe

========== “全部重新生成”: 1 成功,0 失败,0已跳过 ==========

========== 占用时间 00:02.052 ==========

4. 点击菜单"调试-->开始执行(不调试)运行,将看到输出结果:

相关推荐

wifi恢复出厂设置后上不了网

恢复出厂设置后,路由器的网络设置也被清空了,需要重新设置账号和密码等信息并配置网络。还需要确认路由器的网线连接是否正确,以及是否有其他网络设备干扰。 如果重新配置还是连不上网不能用,可能需要...

联想笔记本蓝屏怎么解决(联想笔记本蓝屏怎么解决方法)

回答如下:如果您的联想笔记本电脑出现蓝屏问题,可以尝试以下解决方法:1.重启电脑:尝试简单的重启电脑,看是否可以解决问题。2.检查硬件:检查您的笔记本电脑是否有硬件故障。例如,您可以拔下所有外接设...

微星显卡型号档次梯队(微星显卡大全)

2019年微星新出的显卡主要系列划分:VENTUS(万图师):入门级版本,也有人说是丐版,用料一般。ARMOR(装甲师):中低版本,做工用料主流,比丐版强一点。DUKE(暗黑龙爵):中等版本,做工用料...

腾达扩展器a12设置(腾达扩展器设置方法)

1、检查扩展器的WiFi是否正确无线扩展器连接的是上端的WiFi,然后再转发出新的WiFi。所以,必须要知道正确的上端WiFi信息,比如WiFi名称和密码。解决方法:用手机连接上端WiFi,登录到这个...

手机文件彻底删除如何恢复(手机里文件删了怎么恢复)
  • 手机文件彻底删除如何恢复(手机里文件删了怎么恢复)
  • 手机文件彻底删除如何恢复(手机里文件删了怎么恢复)
  • 手机文件彻底删除如何恢复(手机里文件删了怎么恢复)
  • 手机文件彻底删除如何恢复(手机里文件删了怎么恢复)
win7 旗舰版32位密钥(win7旗舰版密钥32位激活不了)

可以win7旗舰版32位产品密钥:1、TG664-TJ7YK-2VY3K-4YFY6-BCXF4;2、MVG64-RQDVY-KB9RM-MX9WT-MW824;3、TDTY2-6HJ49-46PCK...

win7下安装ghostxp(win7安装方法ghost)

在win7家庭版电脑中安装虚拟xp系统方法:1.首先安装windows6.1-kb958559-x86-refreshpkg补丁。2.安装完成后,需要重启电脑。3.重启电脑,再安装windowsxpm...

电脑怎么锁屏快捷键(暂时离开电脑怎么锁屏快捷键)

计算机锁屏的快捷键在不同的操作系统上可能会有所不同,但在Windows系统中通常是“Windows键+L”组合键。当您按下这个组合键时,计算机会立即锁定屏幕,需要输入密码才能解锁。这个快捷键可以方便地...

microsoft+teams+meeting怎么加入会议

teams手机点击加入会议没有反应原因和解决方法如下:1.时区不对,把电脑屏幕右下角时区调整好即可进入TeamsPC版。2.会议主办方的问题。3.MicrosoftTeams客户端的大多数问题都...

笔记本怎么设置wifi(笔记本怎么设置wifi密码)

笔记本电脑连接无线网络的具体设置步骤如下:1.打开电脑上的无线网络连接功能。在电脑屏幕下方中央区域找到网络连接图标,通常是两个悬挂的屏幕,点击打开。2.在网络连接列表中找到无线选项。一般无线选项图...

键盘所有按键都没反应(键盘无反应,鼠标正常)

台式机键盘失灵可以按以下四步来解决:1、重新插键盘与主机连接接口。有可能因为接口的接触不良导致的键盘失灵,这时可以对插头进行拔插,注意:如果是USB接口,可以直接插拔,而如果是圆形接头最好关机后再操作...

手机win10主题下载(手机windows11主题)

前面三位的方法都太复杂,还要找用户名什么。下面软件就搞定了,还可以自动提取Win10主题包里的壁纸。网页链接在软件上右键:一键打开主题目录,一键打开壁纸目录如果要提取主题包里的Win10壁纸,只要把主...

手机360助手有用吗

360手机助手是一款Android手机应用市场,由著名的安全软件厂商奇虎360公司开发和维护。它提供了丰富的应用程序下载、游戏下载、主题壁纸等资源,并且具备一定的应用管理和手机优化功能。360手机助手...

电脑主机频繁启动但启动不了

这个情况有可能是内存条换了,我上次就是这个情况,不知道怎么把内存条给烧了,然后它一給它插上电源就反复重启,刚一打开就自己又关上了反反复复。还有一次是因为这个电脑主机的电源插座的线换了,那个插头的口给烧...

用光盘重装电脑系统(用光盘重新安装系统)
  • 用光盘重装电脑系统(用光盘重新安装系统)
  • 用光盘重装电脑系统(用光盘重新安装系统)
  • 用光盘重装电脑系统(用光盘重新安装系统)
  • 用光盘重装电脑系统(用光盘重新安装系统)

取消回复欢迎 发表评论: