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