python.exe crash and ctypes use

waldek waldemar.rymarkiewicz at gmail.com
Thu Jul 24 04:02:18 EDT 2008


On Jul 23, 4:39 pm, Thomas Heller <thel... at python.net> 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



More information about the Python-list mailing list