我看没什么大问题。您应该使用byref,而不是创建一个完整的pointer并定义argtypes,但是您所拥有的应该可以工作。在
图书馆#include
#include
#include
typedef struct _NodeStatInfo {
char status[10];
char name[64];
} NodeStatInfo;
int count = 3;
int cluster_info(char *remote_ip,
NodeStatInfo ***info,
int *node_count)
{
int i;
*info = (NodeStatInfo **)malloc(sizeof(NodeStatInfo *) * count);
for(i = 0; i < count; i++) {
(*info)[i] = (NodeStatInfo *)malloc(sizeof(NodeStatInfo));
strcpy((*info)[i]->status, "init");
sprintf((*info)[i]->name, "node%d", i);
}
*node_count = count;
return 0;
}
Python:
^{pr2}$
演示:>>> SOME_IP = '192.168.1.1'
>>> node_info = PP_NodeStatInfo()
>>> sn_count = c_int(0)
>>> lib.cluster_info(SOME_IP, byref(node_info), byref(sn_count))
0
>>> [node_info[i][0].status for i in range(sn_count.value)]
['init', 'init', 'init']
>>> [node_info[i][0].name for i in range(sn_count.value)]
['node0', 'node1', 'node2']