I'm calling a C shared library from Python on a Linux system.
The problem I'm running into is the function inside the C library takes a pointer to a structure as an argument. It then mallocs the memory for an array of structures, populates the array with data and returns. So I've defined the function as
from ctypes import *
class myStruct(Structure):
_fields_ = [("id", c_uint), "name", c_char*256)]
library.func.argtypes = [POINTER(myStruct)]
Then I call it like so:
Myfoo = myStruct
Foo = pointer(Myfoo)
Bar = library.func(Foo)
for i in range(Bar):
print("id = %u, name = %s" % (Foo[i].id, Foo[i].name))
Bar contains the number of structures that were allocated by func.
No matter what I do, I can't get any data out of Foo. I've tried multiple different variations on this for months. I can look at the logs from the C library and I know it's getting the data and returning it, but I can't seem to find a way to extract it from Python.
Any thoughts?
func()? It takes a pointer to myStruct as a parameter, got that, but then it allocates memory for an array of what? More myStructs? And where is the pointer to the new memory supposed to go? Or isfunc()supposed to take amyStruct**argument, and it fills in the new pointer there?