我设法编写代码,以便我可以通过回调从C ++调用python。使用了ctypes。
Python中的回调设置是这样的:
proto = ctypes.CFUNCTYPE( ctypes.c_char_p, ctypes.POINTER( ctypes.c_char))
def parser( query, result):
# Parsing code
fp = proto( parser_func)
这有效,但我从C ++传递一个固定的64k缓冲区。这是不可接受的:我需要处理一个变量缓冲区。我们提出的唯一解决方案是添加另一个回调,在其中我们返回一个python对象的句柄。然后我们将其传递给解析器回调。然后我们可能需要第三个函数,以便Python可以回收内存,或类似的东西
如果有人有想法,寻找最简单的方法
答案 0 :(得分:0)
我最终实现了两个回调。一个计算长度(通过解析查询,并返回长度。)另一个解析完全类似于第一个,但通过客户端现在可以提供的缓冲区返回解析输出,知道长度。它没有效率,但它的功能与我尝试过的其他功能不同。感谢您的建议