7

我试图从 C 代码中调用 python 函数,我遵循了一个示例 from here

我也有正确的包含文件目录、库目录,并链接了 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 */

Py_Initialize()、PyImport_Import()、PyModule_GetDict() 都可以正常工作,但 PyString_FromString 不行...

4

1 回答 1

18

您使用的示例代码适用于古老的 Python 版本 2.3.2。Python 3.x 行不仅在语言中而且在 C API 中引入了许多不兼容项。

您提到的函数在 Python 3.2 中不再存在。

PyString_函数重命名为PyBytes_.

PyInt_功能没了,PyLong_应该改用。

这是您使用的相同示例,但用于 Python 3:

5.3. 纯嵌入

请注意,它使用PyUnicode_而不是PyString_/PyBytes_. 在 Python 2.x 使用字节字符串的许多地方,Python 3.x 使用 unicode 字符串。

顺便说一句,我通常使用这个页面来查找所有可能的调用:

指数 - P

于 2011-11-22T16:01:57.123 回答