嵌入python

2024-10-04 13:19:13 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我也有正确的include file directries、library directries,并链接了python32.lib(im使用python32),但是错误是python/C api,如PyString_FromString、PyInt_fromslong、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()、Py Import_Import()、PyModule_GetDict()都工作正常,但PyString_FromString除外。。。


Tags: pyimportapi错误intfromstringargvargc
1条回答
网友
1楼 · 发布于 2024-10-04 13:19:13

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

您提到的函数在Python3.2中已经不存在了。

PyString_函数被重命名为PyBytes_

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

下面是与Python3相同的示例:

5.3. Pure Embedding

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

顺便说一下,我通常用这个页面来查找所有可能的电话:

Index – P

相关问题 更多 >