VS2022 PYTHON3.10 C++ 调用Python文件并执行函数

        日常工作和学习中,有一些现成的Python代码已经写好,自己想在C++程序中调用,如果Python代码量很大,改写困难,就可以直接使用调用的方式。但是这里面会存在C++库环境和Python第三方库不匹配的情况,这里解决起来比较麻烦,后续有解决方案我在写一篇。

 

首先写一个Python文件,命名为add.py,写上代码如下

import sys

def add():
    print("add running!\r\n")
    print(sys.path)  

   VS2022 新建一个工程,添加一个CPP文件,代码如下

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

using namespace std;

int main()
{

    Py_Initialize();

    PyObject* pModule = PyImport_ImportModule("add");
    //这里是要调用的文件名face_detect.py;

    if (pModule == NULL)//如果函数执行失败,则返回NULL
    {
        cout << "没找到该Python文件" << endl;
        return 0;
    }
    else {
        // 检查模块导入是否成功
        if (pModule != NULL) {
            // 获取模块中的函数
            PyObject* pFunction = PyObject_GetAttrString(pModule, "add");
            // 检查函数获取是否成功;
            if (pFunction != NULL) {
                // 准备函数参数
                PyObject* pArgs = NULL;//PyTuple_Pack(2, PyLong_FromLong(2), PyLong_FromLong(3));

                    // 调用Python函数
                    PyObject* pResult = PyObject_CallObject(pFunction, pArgs);

                    /*
                    // 打印结果
                    if (pResult != NULL) {
                        printf("Result of Python function: %ld\n", PyLong_AsLong(pResult));
                        Py_DECREF(pResult);
                    }
                    else {
                        PyErr_Print();
                    }
                    // 释放函数参数
                    Py_DECREF(pArgs);
                    */

                // 释放函数对象
                Py_DECREF(pFunction);
            }
            else {
                PyErr_Print();
            }
                // 释放模块对象
                Py_DECREF(pModule);
        }
        else {
            PyErr_Print();
        }
    }

    Py_Finalize();

}

VS2022添加Python.h的库头文件,在Python环境路径下的include文件夹,Python环境下的Lib和Libs,不会添加请自行百度,教程很多

Python环境路径就是你的安装路径

长这样,最重要的一步是把add.py放到这个文件下

没有什么问题就可以直接运行程序,运行结果如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

potato_potato_123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值