从python如何将sys.settrace回调中接收的帧对象传递给需要作废的c ++函数*

时间:2019-02-07 12:54:46

标签: type-conversion swig python-bindings

从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

1 个答案:

答案 0 :(得分:1)

尝试使用typemap将Python输入对象转换为void*参数时将其转换为void* frame。您还可以添加一个检查,确认该对象实际上是PyFrameObject。

%typemap(in) void* frame %{
    $1 = (void*)$input;
%}