python.exe crash and ctypes use

Thomas Heller theller at python.net
Wed Jul 23 10:39:29 EDT 2008


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



More information about the Python-list mailing list