On Jul 23, 4:39 pm, Thomas Heller <[EMAIL PROTECTED]> wrote: > waldek schrieb: > > > > > Hi, > > > 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." > > =========================== > > 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 -- http://mail.python.org/mailman/listinfo/python-list