传递带有指向另一个stru的指针的结构的ctypes

2024-09-30 07:34:10 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的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结构。在


Tags: 代码参数结构mdstructintstuffchar
2条回答

您需要定义一个class MoreData(Structure)来包装另一个结构。然后将其作为("md", POINTER(MoreData))传递。在

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

Ctypes对于C结构的一次性访问是很好的,但是如果您经常将C代码与Python绑定在一起,那么我建议您查看Cython。在

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

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

相关问题 更多 >

    热门问题