我正在Linux系统上从Python调用一个C共享库。
我遇到的问题是C库中的函数需要一个结构体指针作为参数。然后它使用malloc为一组结构体分配内存,填充数组数据并返回。因此,我定义了以下函数:
from ctypes import *
class myStruct(Structure):
_fields_ = [("id", c_uint), "name", c_char*256)]
library.func.argtypes = [POINTER(myStruct)]
然后我这样调用它:
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包含了由func分配的结构体数量。
无论我怎么做,都无法从Foo中获取任何数据。我已经尝试了多种不同的方法数月,但是无法从Python中提取数据,我可以查看C库的日志,知道它正在获得并返回数据,但似乎找不到提取数据的方法。
有什么想法吗?
func()
的函数签名吗?它以指向 myStruct 的指针作为参数,我明白了,但是它分配了一个什么样的数组的内存呢?更多的 myStructs 吗?新内存的指针应该放在哪里?或者func()
应该接受一个myStruct**
参数,并在那里填充新指针吗? - the paul