我只能找到python 2的教程和链接,而不是3。 自2以来,许多功能都发生了变化,教程不再有效。
我能够从另一个Stackoverflow问题中得到这个,它似乎是最接近工作的。
char *my_result = 0;
PyObject *module = 0;
PyObject *result = 0;
PyObject *module_dict = 0;
PyObject *func = 0;
PyObject *pArgs = 0;
module = PyImport_ImportModule("testPython");
if (module == 0)
{
PyErr_Print();
printf("Couldn't find python module");
}
module_dict = PyModule_GetDict(module);
func = PyDict_GetItemString(module_dict, "helloWorld");
//result = PyObject_CallObject(func, NULL);
result = PyEval_CallObject(func, NULL);
my_result = PyBytes_AsString(result);
my_result = strdup(my_result);
但my_result输出0000.当使用断点时,它表示它无法读取内存。
答案 0 :(得分:1)
试试这个:
static float CallPythonFunc()
{
PyObject *pName, *pModule, *pDict, *pFunc, *pValue, *pArgs;
float ret;
Py_Initialize();
pName = PyBytes_FromString("py");
pModule = PyImport_ImportModule("py");
pDict = PyModule_GetDict(pModule);
pFunc = PyDict_GetItemString(pDict, "add");
if (PyCallable_Check(pFunc))
{
pArgs = PyTuple_New(2 /*number of arguments*/);
// Argument 1
pValue = PyFloat_FromDouble((double)5);
PyTuple_SetItem(pArgs, 0, pValue);
// Argument 2
pValue = PyFloat_FromDouble((double)6);
PyTuple_SetItem(pArgs, 1, pValue);
pValue = PyObject_CallObject(pFunc, pArgs);
ret = (float)PyFloat_AsDouble(pValue);
}
Py_Finalize();
return ret;
}