0

从 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

4

1 回答 1

1

void*当它是void* frame参数时,尝试使用类型映射将 Python 输入对象转换为 a。您还可以检查该对象实际上是 PyFrameObject。

%typemap(in) void* frame %{
    $1 = (void*)$input;
%}
于 2019-02-09T03:40:24.167 回答