C/C++调用python

切记要在链接器->输入加上python312.lib(根据安装版本来),同时在vc++目录增加对应的头文件目录和库目录。

 

 


   call_py_fig(3, x, y, P, denu);


#include <Python.h>

extern void call_py_fig(int nrefpoint, double* refpoint_x, double* refpoint_y, double* distance,double *pos)
{
    //调用python画图
    PyObject* pName, * pModule, * pDict, * pFunc, * pFun_test;
    PyObject* pArgs, * pValue;

    Py_Initialize();
    // 检查初始化是否成功  
    if (!Py_IsInitialized())
    {
        printf("初始化失败\n");
        Py_Finalize();
    }

    PyRun_SimpleString("import sys");
    //PyRun_SimpleString("sys.path.append('D:\Users\joy.liu\AppData\Local\Programs\Python\Python310\Lib\site-packages\matplotlib\__init__.py')");

    PyRun_SimpleString("sys.path.append('./')");
    PyRun_SimpleString("print(sys.path)");
    //获取python文件名,导入模块(我这里的py文件是graph.py) 
    pModule = PyImport_ImportModule("POS_GRAPH");
    //pName = PyUnicode_FromString("graph");
    //pModule = PyImport_Import(pName);

    if (!pModule) {
        printf("py文件导入失败\n");
        PyErr_Print();
        exit(1);
    }
    else {
        //直接获取模块中的函数
        pFunc = PyObject_GetAttrString(pModule, "create_posgraph");

        //验证函数是否获取成功
        if (!pFunc) {
            printf("函数导入失败\n");
            Py_Finalize();
        }

        pArgs = PyTuple_New(5);
        PyObject* listX = PyList_New(0);
        PyObject* listY = PyList_New(0);
        PyObject* listP = PyList_New(0);
        PyObject* listuser = PyList_New(0);
        for (int i = 0; i < nrefpoint; i++)
        {
            PyList_Append(listX, Py_BuildValue("d", refpoint_x[i]));
            PyList_Append(listY, Py_BuildValue("d", refpoint_y[i]));
            PyList_Append(listP, Py_BuildValue("d", distance[i]));
        }
        PyList_Append(listuser, Py_BuildValue("d", pos[0]));
        PyList_Append(listuser, Py_BuildValue("d", pos[1]));

        pValue = PyLong_FromLong(nrefpoint);
        PyTuple_SetItem(pArgs, 0, pValue);

        PyTuple_SetItem(pArgs, 1, listX);
        PyTuple_SetItem(pArgs, 2, listY);
        PyTuple_SetItem(pArgs, 3, listP);
        PyTuple_SetItem(pArgs, 4, listuser);

        pValue = PyObject_CallObject(pFunc, pArgs);
        printf("success\n");


    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值