ctypes – 将带有指针的结构传递给另一个结构

在我的C代码中我有:

typedef struct{ int info1; int info2; MoreData* md; } BasicData; typedef struct{ int extinfo[100]; char stuff[100]; } MoreData; 

现在我有一个C库函数,它将BasicData作为参数,我想从Python调用它。 为此,我构建了一个ctypes类:

 class BasicData(Structure): _fields_ = [("info1", c_int), ("info2", c_int), ("md", ??????)] 

我的问题是我要填写什么? 空间能够将此结构传递给C函数(或者我需要一些完全不同的东西?)。 MoreData只是在计算过程中使用,我不需要在我的Python代码中读取它,因此为它分配内存将从C库级别处理。 我只需要传递一个具有正确指针类型的BasicData结构。

如果您不需要分配或使用MoreData结构,那么就ctypes而言, md只是一个通用指针。 使用void * – 即c_void_p

您需要定义包含其他结构的class MoreData(Structure) 。 然后将其传递为("md", POINTER(MoreData))

C保证struct字段按顺序分配,所以如果你真的不想从Python访问md那么你就不能在_fields_指定它(因为它是最后的)。 然后ctypes会相信你有一个只有前两个成员的结构。

Ctypes可以一次性访问C结构,但是如果你经常用C语言将C代码绑在一起,那么我真的建议你查看Cython。

编辑:正如eryksun指出的那样(微弱的双关语),我忘记了指针。