Thanks for the prompt and detailed reply. I tried that but was getting this error:
AttributeError: 'LP_IP2LocationRecord' object has no attribute 'country_short' Here's my version, which I think is equivalent to yours: (as a matter of fact, I also tried yours and got the same error.) class IP2LocationRecord(Structure): _fields_ = [("country_short", c_char_p), ("country_long", c_char_p), ("region", c_char_p), ("city", c_char_p), ("isp", c_char_p), ("latitude", c_float), ("longitude", c_float), ("domain", c_char_p), ("zipcode", c_char_p), ("timezone", c_char_p), ("netspeed", c_char_p)] IP2Location_get_all.restype = POINTER(IP2LocationRecord) IP2LocationObj = IP2Location_open(thisdir + '/IP-COUNTRY-SAMPLE.BIN') rec = IP2Location_get_all(IP2LocationObj, '64.233.167.99') print rec.country_short IP2Location_close(IP2LocationObj) "sturlamolden" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > On Apr 25, 5:15 am, sturlamolden <[EMAIL PROTECTED]> wrote: > >> First define a struct type IP2LocationRecord by subclassing from >> ctypes.Structure. Then define a pointer type as >> ctypes.POINTER(IP2LocationRecord) and set that as the function's >> restype attribute. See the ctypes tutorial or reference for details. > > Which is to say: > > import ctypes > > class IP2LocationRecord(ctypes.Structure): > _fields_ = [ > ('country_short', ctypes.c_char_p), > ('country_long', ctypes.c_char_p), > ('region', ctypes.c_char_p), > ('city', ctypes.c_char_p), > ('isp', ctypes.c_char_p), > ('latitude', ctypes.c_float), > ('longitude', ctypes.c_float), > ('domain', ctypes.c_char_p), > ('zipcode', ctypes.c_char_p), > ('timezone', ctypes.c_char_p), > ('netspeed', ctypes.c_char_p), > ] > > IP2LocationRecord_Ptr_t = ctypes.POINTER(IP2LocationRecord) > > function.restype = IP2LocationRecord_Ptr_t > > -- http://mail.python.org/mailman/listinfo/python-list