Pet*_*erG 7 c python python-embedding python-c-api
我试图从C代码调用python函数,我从这里跟随一个示例
我也有正确的包含文件目录,库目录,并链接python32.lib(即时使用python 32)但是错误是python/C API,如PyString_FromString,PyInt_FromLong,PyInt_AsLong未定义(调试器中的错误)
这很奇怪,因为我也使用其他API,但它们都很好......
这是什么问题?
int
main(int argc, char *argv[])
{
PyObject *pName, *pModule, *pDict, *pFunc;
PyObject *pArgs, *pValue;
int i;
if (argc < 3) {
fprintf(stderr,"Usage: call pythonfile funcname [args]\n");
return 1;
}
Py_Initialize();
pName = PyString_FromString(argv[1]);
/* Error checking of pName left out */
pModule = PyImport_Import(pName);
Py_DECREF(pName);
if (pModule != NULL) {
pDict = PyModule_GetDict(pModule);
/* pDict is a borrowed reference */
Run Code Online (Sandbox Code Playgroud)
Py_Initialize(),PyImport_Import(),PyModule_GetDict()一切正常,但不是PyString_FromString ......
yak*_*yak 19
您使用的示例代码是针对古代Python版本2.3.2.Python 3.x系列不仅在语言中引入了许多不兼容性,而且在C API中引入了许多不兼容性.
您提到的功能在Python 3.2中不再存在.
PyString_功能被重命名为PyBytes_.
PyInt_功能消失了,PyLong_应该用来代替.
这是您使用但Python 3的相同示例:
请注意,它使用的是PyUnicode_代替PyString_/PyBytes_.在Python 2.x使用字节字符串的许多地方,Python 3.x使用unicode字符串.
顺便说一句,我通常使用此页面查找所有可能的调用: