Access array of c-structs using Python ctypes

Posted by sadris on Stack Overflow See other posts from Stack Overflow or by sadris
Published on 2011-11-29T21:48:29Z Indexed on 2011/11/30 1:50 UTC
Read the original article Hit count: 187

Filed under:
|
|
|

I have a C-function that allocates memory at the address passed to and is accessed via Python. The pointer contents does contain an array of structs in the C code, but I am unable to get ctypes to access the array properly beyond the 0th element. How can I get the proper memory offset to be able to access the non-zero elements? Python's ctypes.memset is complaining about TypeErrors if I try to use their ctypes.memset function.

typedef struct td_Group
{
    unsigned int group_id;
    char groupname[256];
    char date_created[32];
    char date_modified[32];
    unsigned int user_modified;
    unsigned int user_created;
} Group;

int getGroups(LIBmanager * handler, Group ** unallocatedPointer);

############# python code below: 
class Group(Structure):
    _fields_ = [("group_id", c_uint),
                ("groupname", c_char*256),
                ("date_created", c_char*32),
                ("date_modified", c_char*32),
                ("user_modified", c_uint),
                ("user_created", c_uint)]


myGroups = c_void_p()
count = libnativetest.getGroups( nativePointer, byref(myGroups) )
casted = cast( myGroups, POINTER(Group*count) )
for x in range(0,count):
    theGroup = cast( casted[x], POINTER(Group) )
    # this only works for the first entry in the array:
    print "~~~~~~~~~~" + theGroup.contents.groupname

Related: Access c_char_p_Array_256 in Python using ctypes

© Stack Overflow or respective owner

Related posts about python

Related posts about c