如何将c++枚举转换为ctypes ?结构使用Python 2.7.2

How can I convert a C++ enum to ctypes.Structure using Python 2.7.2?

本文关键字:结构 Python ctypes c++ 枚举 转换      更新时间:2023-10-16

我已经搜索和搜索,但我还没有找到一个例子,做什么我需要做的。
我发现如何表示'enum&# 39;在Python中?这里是SO,但它不包括ctypes。structure。我还发现在ctypes中使用枚举。结构这里是SO,但它包括指针,我不熟悉。

我有一个头文件,其中包括typedef enum,我需要在ctypes中使用。结构

c++头文件:

typedef enum {
        ID_UNUSED,
        ID_DEVICE_NAME,
        ID_SCSI,
        ID_DEVICE_NUM,
} id_type_et; 

Python文件(我目前的做法):

class IdTypeEt(ctypes.Structure):
        _pack_ = 1
        _fields_ = [ ("ID_UNUSED", ctypes.c_int32),
            ("ID_DEVICE_NAME", ctypes.c_char*64),
            ("ID_SCSI", ctypes.c_int32),
            ("ID_DEVICE_NUM", ctypes.c_int32) ]
如有任何建议,我将不胜感激。越简单越好

enum不是一个结构体,它是一个具有一组预定义值(枚举常量)的整型。用ctypes.Structure表示是没有意义的。您正在寻找类似这样的内容:

from ctypes import c_int
id_type_et = c_int
ID_UNUSED = id_type_et(0)
ID_DEVICE_NAME = id_type_et(1)
ID_SCSI = id_type_et(2)
ID_DEVICE_NUM = id_type_et(3)