2011-07-03 35 views
1

我將如何通過C-API動態添加方法到我的模塊?我有很多我需要註冊的函數,它們不在同一個數組中。我假設我可以使用NULL方法表初始化模塊,因爲文檔說這是可能的。通過C-API向模塊添加新命令?

PyObject *mymod = Py_InitModule("my", NULL); 

什麼是一次添加我的方法一個函數的名稱。

回答

2

基本上,你必須得到阿霍德模塊字典的第一:

d = PyModule_GetDict(m); 

存放在PyString對象模塊名稱:

n = PyString_FromString("modname"); 

然後適當填充PyMethodDef結構ml和創建一個新的可調用對象:

v = PyCFunction_NewEx(&ml, (PyObject*)NULL, n); 

並添加這個可調用鍵的功能名稱模塊字典:

PyDict_SetItemString(d, ml->ml_name, v); 

我明顯地跳過了所有相關的錯誤檢查。

這一切都是我的什麼Py_InitModule4做解釋(Py_InitModule是一個宏調用Py_InitModule4使用默認參數)。

+0

非常感謝。 – Juan