2015-01-20 91 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

我最終實現兩個回調。一個計算長度(通過解析查詢並返回長度)。另一個與第一個解析完全一樣,但通過客戶端現在可以提供的緩衝區返回解析輸出,並知道長度。它效率不高,但它與我嘗試過的其他一切不同。感謝您的建議