Я искал и искал, но я не нашел пример, который делает то, что мне нужно сделать.
я нашел
Как я могу представить Enum в Python?
здесь на SO, но это не распространяется на ctypes.Structure.
Я также нашел
Использование перечислений в ctypes.Structure
здесь на SO, но он включает в себя указатели, с которыми я не знаком.
У меня есть файл заголовка, который включает ende typedef, который мне нужно использовать в ctypes.Structure в файле Python.
Заголовочный файл 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)
Других решений пока нет …