切记要在链接器->输入加上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");
}
}