我正在尝试使用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),但是它没有在指令中定义它,所以我假设它应该自动将它识别为模块的名称。
完整的代码是:
#include <Python.h>
#include <iostream>
using namespace std;
static PyObject *SpamError;
int main()
{
cout << "Test" << endl;
system("PAUSE");
return(0);
}
static PyObject *spam_system(PyObject *self, PyObject *args)
{
const char *command;
int sts;
if (!PyArg_ParseTuple(args, "s", &command))
return NULL;
sts = system(command);
return PyLong_FromLong(sts);
}
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;
}
发布于 2012-02-25 07:39:17
您仍在编写C++,因此仍然需要在某个地方声明spammodule
。这将在同一页的后面给出:
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
};
发布于 2012-02-25 07:39:48
不,PyModule_Create()
接受指向模块定义结构的指针,并且与源文件的名称完全无关。
https://stackoverflow.com/questions/9439581
复制相似问题