嵌入python

时间:2011-11-22 15:48:07

标签: python c python-c-api python-embedding

我试图从C代码调用python函数,然后我跟踪了来自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 ......

1 个答案:

答案 0 :(得分:19)

您使用的示例代码是针对古代Python版本2.3.2。 Python 3.x系列不仅在语言中引入了许多不兼容项,而且在C API中引入了许多不兼容项。

你提到的功能在Python 3.2中已不复存在。

PyString_个函数已重命名为PyBytes_

PyInt_函数消失了,应该使用PyLong_

以下是您使用过但与Python 3相同的示例:

5.3. Pure Embedding

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

顺便说一下,我通常会使用此页面查找所有可能的电话:

Index – P

相关问题