我正在尝试绑定一个如下接受Gst Buffer的函数
some_function(GstBuffer *buffer)
m.def(some_function,&some_function);
使用上面的代码将其绑定,当从python调用时,它说
some_function支持args0:_GstBuffer类型,但不支持python类型的Gst.Buffer对象。
我试图放 GST = py :: module :: import('gi.repository.Gst')但没有用,是否有其他方法可以解决此问题。 谢谢
答案 0 :(得分:0)
如果您要绑定接受pybind未知类型的函数,则可以将其作为通用py::object
参数进行传递。
m.def("some_function",
[](py::object obj){
...
});
现在可以在函数中使用传递的py::object
的python接口。但是我想这不是您要在C ++方面要做的。
问题出在从python-wrapper-around-c ++-object到pure-c ++-object的转换。
pybind不知道所传递的包装的布局,并且无法从python对象提取纯C ++部分。当您使用不是由pybind绑定的类型时(例如gi.repository.Gst
),这是正确的。
要获取py::object
的C ++部分,您需要知道C ++部分所在的位置。您要么需要手动执行,要么需要其他绑定库的帮助。