用C++扩展Python 3

2024-09-28 20:50:23 发布

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

我试图使用给定的here指令扩展python3,我很有信心到目前为止我已经正确地遵循了这些指令,但它要求我包括以下代码:

PyMODINIT_FUNC
PyInit_spam(void)
{
    PyObject *m;

    m = PyModule_Create(&spammodule);
    if (m == NULL)
        return NULL;

    SpamError = PyErr_NewException("spam.error", NULL, NULL);
    Py_INCREF(SpamError);
    PyModule_AddObject(m, "error", SpamError);
    return m;
}

我是用MSVC++2010编写的,它警告我&spammodule是未定义的(模块的名称是spammodule.cpp文件),但它没有在指令中的任何地方定义它,所以我假设它应该自动将它识别为模块的名称。在

完整代码是:

^{pr2}$

Tags: 模块代码名称returnhere指令errorspam
2条回答

不不,PyModule_Create()接受指向模块定义结构的指针,与源文件的名称完全无关。在

你仍然在写C++,所以你仍然需要在某处声明{{CD1}}。这在同一页后面给出:

static struct PyModuleDef spammodule = {
   PyModuleDef_HEAD_INIT,
   "spam",   /* name of module */
   spam_doc, /* module documentation, may be NULL */
   -1,       /* size of per-interpreter state of the module,
                or -1 if the module keeps state in global variables. */
   SpamMethods
};

相关问题 更多 >