c中呼叫python還不簡單啊,既然python能呼叫c,並且把引數以PyObject型別傳入到c,你想想python函式在python裡面是什麼型別,當然也是PyObject,萬事萬物皆PyObject,既然如此,你完全可以把函式作為PyObject傳遞給c嘛。為了湊點字數,下面搞點程式碼,若有人覺得眼熟,請當作沒看見。
首先定義一個PyObject型別的指標,一會兒會讓這個指標指向你的Python函式
然後定義一個返回PyObjec指標的函式,函式名隨便,這個函式和python通訊,所以第二個引數是你傳遞進來的python引數,然後用PyArg_ParseTuple解析引數,為了檢驗這個引數是不是函式,還需要進行PyCallable_Check的檢查,看看是不是可呼叫的,如果不是,則報錯,如果是則把函式傳給my_callback。具體如下
接著就呼叫PyObject_CallObject回撥my_callback引用的python函式,回撥的引數需要用Py_BuildValue處理下,直接傳c的型別可不行
大功告成,詳細請看python官方文件吧
c中呼叫python還不簡單啊,既然python能呼叫c,並且把引數以PyObject型別傳入到c,你想想python函式在python裡面是什麼型別,當然也是PyObject,萬事萬物皆PyObject,既然如此,你完全可以把函式作為PyObject傳遞給c嘛。為了湊點字數,下面搞點程式碼,若有人覺得眼熟,請當作沒看見。
首先定義一個PyObject型別的指標,一會兒會讓這個指標指向你的Python函式
然後定義一個返回PyObjec指標的函式,函式名隨便,這個函式和python通訊,所以第二個引數是你傳遞進來的python引數,然後用PyArg_ParseTuple解析引數,為了檢驗這個引數是不是函式,還需要進行PyCallable_Check的檢查,看看是不是可呼叫的,如果不是,則報錯,如果是則把函式傳給my_callback。具體如下
接著就呼叫PyObject_CallObject回撥my_callback引用的python函式,回撥的引數需要用Py_BuildValue處理下,直接傳c的型別可不行
大功告成,詳細請看python官方文件吧