2015-01-20 51 views
1

我设法编写代码,以便可以通过回调从C++调用python。使用了ctypes。从C++调用python,通过回调,使用变量缓冲区

在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可以回收内存,或者类似的东西

寻找做到这一点最简单的方法,如果任何人有想法

+1

您可以尝试在[Cython](http://cython.org)中编写助手函数。这可以从C中调用,但它可以使用Python对象,而无需手动调整refcounts等。 – Kevin 2015-01-20 20:09:26

回答

0

我最终实现两个回调。一个计算长度(通过解析查询并返回长度)。另一个与第一个解析完全一样,但通过客户端现在可以提供的缓冲区返回解析输出,并知道长度。它效率不高,但它与我尝试过的其他一切不同。感谢您的建议