我想所示为Python回调添加到C++库:Python的回调与SWIG包裹型
template<typename T> void doCallback(shared_ptr<T> data) {
PyObject* pyfunc; //I have this already
PyObject* args = Py_BuildValue("(O)", data);
PyEval_CallObject(pyfunc,args);
}
失败的原因是数据没有经过痛饮走了,是不是的PyObject。
我试着使用:
swigData = SWIG_NewPointerObj((void*)data, NULL, 0);
但由于其模板,我真的不知道有什么用第二个参数。即使我对“正确的”SWIGTYPE进行了硬编码,它通常会在PyEval_CallObject上进行段错误。
所以我的问题是:
请告诉我援引痛饮 型包装的最佳方式?
我是否在正确的 方向?董事看起来 承诺实施 回调,但我找不到一个 董事与Python的例子。
更新:是如何产生正确的包装。我有其他函数返回shared_ptrs,并可以正确调用这些函数。
感谢您的更新,但我想我很困惑。为什么不把你的shared_ptr数据传递给你的Python函数?为什么要有一个doCallback()呢? –
我的库封装了现有的C++库。 doCallback()只是底层库不时调用的处理函数。要清楚:我从来没有从python调用doCallback()。 – rogueg
啊,当然!我添加了一个新的答案,可以更好地为您服务。 –