2022-08-03

#include

#include "Python.h"

PyObject* CallFunc(const char* py_path, const char* name_module, const char* name_func, PyObject* pyArgs)

{

std::string temp = "sys.path.append('" + std::string(py_path) + "')";

const char* path = temp.c_str();

PyRun_SimpleString("import sys");

PyRun_SimpleString(path);

PyObject* pyMod = PyImport_ImportModule(name_module);

if (!pyMod)

{

printf("Cant open Py file\n");

return 0;

}

PyObject* pyFunc = PyObject_GetAttrString(pyMod, name_func);

if (!pyFunc)

{

printf("Get function failed\n");

return 0;

}

PyObject* pyReturn = PyObject_CallObject(pyFunc, pyArgs);

if (!pyReturn)

{

printf("Call function failed!\n");

return 0;

}

printf("Call function successfully!\n\n");

return pyReturn;

}

int main()

{

Py_Initialize();//初始化python解释器

PyObject *ptrPyArgs = PyTuple_New(2);

PyTuple_SetItem(ptrPyArgs, 0, Py_BuildValue("i", 3));

PyTuple_SetItem(ptrPyArgs, 1, Py_BuildValue("i", 4));

const char* path = "E:\\VS_WORK\\PythonTest\\PythonTest";//py文件所在目录,有些版本不支持双斜杠例如vs2019

const char* fileName = "sum";//不加py后缀

const char* funcName = "mySum";//函数名

PyObject *PyRet = CallFunc(path, fileName, funcName, ptrPyArgs);

int data = -1;

int data1 = -1;

//PyArg_Parse(PyRet, "i", &data);//返回值只有一个使用PyArg_Parse解析

PyArg_ParseTuple(PyRet, "ii", &data, &data1);//返回值有多个使用PyArg_ParseTuple解析

std::cout << data << std::endl;

Py_Finalize();

system("pause");

return 0;

}

你可能感兴趣的:(2022-08-03)