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