在我的C代码中我有:
typedef struct{
int info1;
int info2;
MoreData* md;
} BasicData;
typedef struct{
int extinfo[100];
char stuff[100];
} MoreData;
现在我有一个C库函数,它以BasicData为参数,我想从Python调用它。 为此,我构造了一个ctypes类:
^{pr2}$我的问题是我要填什么????空间来将这个结构传递给C函数(或者我需要完全不同的东西吗?)。MoreData只是在计算过程中使用的,我不需要在Python代码中读取它,所以为它分配内存将从C库级别处理。我只需要传递一个指针类型正确的BasicData结构。在
您需要定义一个
class MoreData(Structure)
来包装另一个结构。然后将其作为("md", POINTER(MoreData))
传递。在C保证结构字段是按顺序分配的,所以如果您真的不想从Python访问
md
,那么您可以不在_fields_
中指定它(因为它是最后一个)。然后ctypes会认为您的结构只有前两个成员。在Ctypes对于C结构的一次性访问是很好的,但是如果您经常将C代码与Python绑定在一起,那么我建议您查看Cython。在
编辑:正如eryksun指出的(微弱的双关语),我忘记了指针。在
如果不需要分配或使用
MoreData
结构,那么就ctypes而言,md
只是一个通用指针。使用void *
,即c_void_p
。在相关问题 更多 >
编程相关推荐