I have module A.py and B.dll which exports C functions by cdecl_
In A.py I pass callback (py callable) to dll. Next, thread inside dll
simply calls my callback (in a loop). After few secs I got crash of
python.exe.
How to debug it?
I'm using winxp and py 2.5.2
===========================
def mycallback(data, size)
return 0
CBFUNC = CFUNCTYPE(c_int,POINTER(c_int), c_int)
dll = cdll.mydll
if dll.RegisterCallback(CBFUNC(mycallback)) != 0:
print "Error."
===========================
Attach a debugger of choice to your python-process, and see what happens.
Diez
You need the callback function instance - what the CBFUNC(mycallback)
call returns - alive as long as some C code is calling it.
If you don't sooner or later the Python garbage collector will
free it since it seems to be no longer used. ctypes does NOT keep
the callback function alive itself.
Thomas
In fact ctypes does not keep references to callback passed directly to
dll. Now it works.
Thanks Thomas.
Waldek