从sys.settrace的回调函数如何将帧对象传递到接受void *的c ++
限制(在特定情况下): 强制使用sys.settrace(不能使用PyEval_SetTrace) 另外,c ++函数不能接受PyObject *或PyFrameObject *
C ++代码(为此使用SWIG python绑定生成):
class TEST_DECLS InterpPython{
static int TraceHook(void *frame, hwString what, void * arg);
}
Python代码:
sys.settrace(_trace_hook)
def _trace_hook(frame, event, arg):
InterpPython_TraceHook(frame,event, arg)
结果:
TypeError:方法“ InterpPython_TraceHook”中类型为“ void *”的参数1
答案 0 :(得分:1)
尝试使用typemap将Python输入对象转换为void*
参数时将其转换为void* frame
。您还可以添加一个检查,确认该对象实际上是PyFrameObject。
%typemap(in) void* frame %{
$1 = (void*)$input;
%}