我有以下代码:
lib.h
struct Node {
int index;
char name[10];
};
void getAllNodes(Node array[]);
libtest.py
from ctypes import *
class Node(Structure):
_fields_ = [("index", c_uint), ("name", c_char*10)]
lib = CDLL("/path/to/lib.so")
nodeCount = 5
NodeArray = Node * nodeCount
getAllNodes = lib.getAllNodes
pointers = NodeArray()
getAllNodes(pointers)
casted = cast(pointers, POINTER(NodeArray))
for x in range(0, nodeCount):
node = cast(casted[x], POINTER(Node))
print "Node idx: %s name: %s" % (node.contents.index, node.contents.name)
我必须接近,因为索引0处的Node结构具有正确的值,但其余部分是乱码。我构建错误的是什么给了我这个问题?
答案 0 :(得分:3)
它不是一个指针数组。它是一组Node
个记录,在记忆中连续排列。作为函数调用中的参数,数组的作用类似于Node *
(指向第一个项目的指针)。在调用之后,您可以简单地迭代数组:
getAllNodes.argtypes = [POINTER(Node)]
getAllNodes.restype = None
nodeArray = (Node * nodeCount)()
getAllNodes(nodeArray)
例如:
>>> [node.name for node in nodeArray]
['node0', 'node1', 'node2', 'node3', 'node4']