#include <iostream>
#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;
}