您需要從MyFunction
構造一個新的PyCFunctionObject
對象。通常,這是使用模塊初始化代碼引擎蓋下完成的,但你現在做相反的方式,你需要自己構建PyCFunctionObject
,使用無證PyCFunction_New
或PyCFunction_NewEx
,以及合適的PyMethodDef
:
static PyMethodDef myfunction_def = {
"myfunction",
MyFunction,
METH_VARARGS,
"the doc string for myfunction"
};
...
// Use PyUnicode_FromString in Python 3.
PyObject* module_name = PyString_FromString("mymodule");
if (module_name == NULL) {
// error exit!
}
// this is adapted from code in code in
// Objects/moduleobject.c, for Python 3.3+ and perhaps 2.7
PyObject *func = PyCFunction_NewEx(&myfunction_def, pymod, module_name);
if (func == NULL) {
// error exit!
}
if (PyObject_SetAttrString(module, myfunction_def.ml_name, func) != 0) {
Py_DECREF(func);
// error exit!
}
Py_DECREF(func);
再一次,這不是做事情的首選方式;通常一個C擴展會創建具體的模塊對象(如_mymodule
),而mymodule.py
會導入_mymodule
並將事物放入適當的位置。
哪個版本的python? –
我正在使用Python 2.7 – themadmax