Here is a real-world example from the winnt.h, which is not possible to translate to a native enumerated type:
//
// Start Type
//
#define SERVICE_BOOT_START 0x00000000
#define SERVICE_SYSTEM_START 0x00000001
#define SERVICE_AUTO_START 0x00000002
#define SERVICE_DEMAND_START 0x00000003
#define SERVICE_DISABLED 0x00000004
//
//
//
typedef enum _CM_SERVICE_LOAD_TYPE {
BootLoad = SERVICE_BOOT_START,
SystemLoad = SERVICE_SYSTEM_START,
AutoLoad = SERVICE_AUTO_START,
DemandLoad = SERVICE_DEMAND_START,
DisableLoad = SERVICE_DISABLED
} SERVICE_LOAD_TYPE;
The ordinal values of the items in the enumeration SERVICE_LOAD_TYPE depend on the constants declared above it. This is not possible in Delphi. The only way to translate it is:
// // Start Type // CONST SERVICE_BOOT_START = $00000000; SERVICE_SYSTEM_START = $00000001; SERVICE_AUTO_START = $00000002; SERVICE_DEMAND_START = $00000003; SERVICE_DISABLED = $00000004; // // // CONST BootLoad = SERVICE_BOOT_START; SystemLoad = SERVICE_SYSTEM_START; AutoLoad = SERVICE_AUTO_START; DemandLoad = SERVICE_DEMAND_START; DisableLoad = SERVICE_DISABLED; TYPE TServiceLoadType = DWord;
博客提到winnt.h中的SERVICE_LOAD_TYPE枚举,其项的序数依赖于上方声明的常量,在Delphi中无法将其转换为原生枚举类型,唯一的转换方式未详细说明。
7458

被折叠的 条评论
为什么被折叠?



