5
저는 파이썬에서 ctypes를 사용하여 C 라이브러리를 사용하고 있습니다. ctypes.py_object로 사용하고있는 void * 인자를 가진 콜백 함수가 있습니다. 객체 포인터는 콜백이 등록 될 때 라이브러리에 주어집니다. 그러나 파이썬 코드에서 더 이상 참조되지 않으면 파손되어야합니다. 콜백 함수가 호출 될 때까지 생존하기를 원합니다. 어떻게해야합니까?ctypes - C에서 Python 객체로의 참조
callback_t=ctypes.CFUNCTYPE(None, ctypes.py_object)
clib.register_callback.argtypes=[callback_t, ctypes.py_object]
clib.register_callback.restype=None
class Object:
def __init__(self, val):
self.val=val
def callback(obj):
print(obj.val)
callback_c=callback_t(callback)
def calledByOtherCode(val):
clib.register_callback(callback_c, Object(val))
당신은 당신이 콜백 함수에서 사용되는 코드의 예를 보여 주시겠습니까? 이렇게하면 수정 방법을 훨씬 쉽게 표시 할 수 있습니다. 그렇지 않으면 답변자가 예제를 작성하고 접근 방법에 대해 추측해야하며 질문에 답해야합니다. –
다음과 같은 전역 콜백 함수가 있습니다. 다른 개체에 대해 등록되고 등록되지 않은 상태가됩니다. –
파이썬 코드에서'Object (i)'호출에 대한 참조를 유지하여 가비지 수집을 할 수 없습니까? – ebarr