[EMAIL PROTECTED] schrieb: > I am starting to experiment with ctypes. I have a function which returns a > pointer to a struct allocated in heap memory. There is a corresponding free > function for that sort of struct, e.g.: > > from ctypes import * > > cdll.LoadLibrary("libthing.so") > c_thing = CDLL("libthing.so") > > class THING(Structure): > _fields_ = [("name", c_char_p), > ("value", c_int)] > > get_thing = c_thing.get_thing > get_thing.restype = POINTER(THING) > free_thing = c_thing.free_thing > > So I call get_thing() and get back this ctypes wrapper for a pointer to a > thing. I can extract the name and value elements from the thing instance > just fine: > > thing_p = get_thing() > thing = thing_p.contents > print thing.name, "=", thing.value > > Now I need to call free_thing. What do I pass it? thing_p? Some attribute > of thing_p? Something else altogether? The ctypes module docs seem to be > strangely silent on the question of freeing heap memory which you've > received from the underlying library's functions.
You simply declare free by loading libc (I'm a unix-guy, Windows will have an equivalent) as library and then declaring it. And of course it gets a void-pointer, so you have to cast you pointer to void* - as you'd have in C (or get a warning). Diez -- http://mail.python.org/mailman/listinfo/python-list