ma <mabdelka...@gmail.com> wrote: >If I have this struct in C: > >struct spam { > int ham; > char foo; >}; > > >if I have this declaration: >struct spam s_; > >If I wanted to pass a reference to a function of s_'s foo character, I >can do something like this: > >somefunc(&s_.foo) > >How do I do the same thing in ctypes? >ctypes.addressof(s_) + ctypes.sizeof(spam.foo)*(1)
See ctypes.create_string_buffer(). To unpack the struct elements received from the C function, use struct.unpack(). Here some example: def rssiam_volt_Q(self): '''Output Voltage Query ''' query_buffer = ctypes.create_string_buffer(8) self.rssiam_32_dll.rssiam_volt_Q.argtypes = [ctypes.c_long, ctypes.c_char_p] result = self.rssiam_32_dll.rssiam_volt_Q(self.session, query_buffer) if result != VI_SUCCESS: raise IOError, 'rssiam_volt_Q: result = %d' % result return(struct.unpack('d', query_buffer.raw)[0]) In this case, it is a 64 bits float (= double) value that is returned by reference (query_buffer). Attention, struct.unpack() returns a tuple, even when there is only a single element to extract from the buffer. Regards, Günther -- http://mail.python.org/mailman/listinfo/python-list