Я пытаюсь обернуть библиотеку C с помощью ctypes. Одной из особенностей библиотеки является обратный вызов ondestroy, который вызывается, когда дескриптор, возвращаемый библиотекой, вот-вот будет уничтожен.Back-casting ctypes.py_object в обратном вызове
Обработчик имеет подпись:
void cb(f *beingdestroyed);
API-интерфейс позволяет связать указанного пользователем void *
с е, когда он возвращается в библиотеку. Следовательно, я могу связать py_object, который используется для его переноса в качестве пользовательских данных. Мой план состоит в том, чтобы иметь поле is_valid
и когда обратный вызов запускается, чтобы извлечь user_data и установить для этого поля значение false.
Моя проблема заключается в том, как вывести мой высокоуровневый py_object
; Я могу получить пользовательские данные как ctypes.void_p
и отнести к ctypes.py_object
, но тогда у меня есть только API Python C для работы. Можно выполнить обратный вызов на объект высокого уровня, с которым я могу работать, написав user_object.is_valid = 0
?
Спасибо, это было именно то, что мне было нужно. –