Весь сценарий таков:
- в моей библиотеке c есть функция setmessagelistener (a_structure, function_pointer).
Я пишу библиотеку Python , которая является оберткой для вышеупомянутой библиотеки c, используя Ctypes .
так что я сделал что-то вроде этого:
def setlistener(a_structure,function_pointer)
listenerDeclaration = CFUNCTYPE(c_void_p, c_void_p)
listenerFunction = listenerDeclaration(function_pointer)
setMsgListener = c_lib.setMessageListener
setMsgListener.argtypes = [c_void_p, c_void_p]
setMsgListener.restype = c_ubyte
if (setMsgListener(a_structure, listenerFunction)==0):
sys.exit("Error setting message listener.")
- Теперь другая программа на python использует вышеуказанную функцию из моей библиотеки python для выполнения работы, но проблема в следующем:
когда я запускаю программу, это вызывает ошибку сегментации, потому что локальный объект (функция прослушивателя) уже собран мусором (я так думаю), когда управление возвращается из библиотечной функции setListener () как локальный объект.
есть ли какое-нибудь решение этой проблемы? Или я что-то упустил?
пожалуйста, предложите ...
спасибо заранее