从 python 如何将在 sys.settrace 回调中接收到的帧对象传递给采用 void * 的 c++ 函数
From python how to pass frame object received in sys.settrace callback to c++ function which takes void *
从 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' 中,参数 1 的类型为 'void *'
当 void* frame
参数时,尝试使用类型映射将 Python 输入对象转换为 void*
。您还可以添加检查对象是否实际上是 PyFrameObject。
%typemap(in) void* frame %{
= (void*)$input;
%}
从 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' 中,参数 1 的类型为 'void *'
当 void* frame
参数时,尝试使用类型映射将 Python 输入对象转换为 void*
。您还可以添加检查对象是否实际上是 PyFrameObject。
%typemap(in) void* frame %{
= (void*)$input;
%}