将一个C枚举转换为Delphi?

3
我写了一个用 Delphi 编写的数字枚举,你能告诉我在哪里犯了错误吗?有什么不对吗?
C:
 typedef  enum {
   AttributeStandardInformation = 0x10,
   AttributeAttributeList = 0x20,
   AttributeFileName = 0x30,
   AttributeObjectId = 0x40,
   AttributeSecurityDescriptor = 0x50,
   AttributeVolumeName = 0x60,
   AttributeVolumeInformation = 0x70,
   AttributeData = 0x80,
   AttributeIndexRoot = 0x90,
   AttributeIndexAllocation = 0xA0,
   AttributeBitmap = 0xB0,
   AttributeReparsePoint = 0xC0,
   AttributeEAInformation = 0xD0,
   AttributeEA = 0xE0,
   AttributePropertySet = 0xF0,
   AttributeLoggedUtilityStream = 0x100

} ATTRIBUTE_TYPE

并将 Delphi 枚举类型转换为:

ATTRIBUTE_TYPE=( AttributeStandardInformation = $10,
   AttributeAttributeList = $20,
   AttributeFileName = $30,
   AttributeObjectId = $40,
   AttributeSecurityDescriptor = $50,
   AttributeVolumeName = $60,
   AttributeVolumeInformation = $70,
   AttributeData = $80,
    //AttributeData1 = $0,    // has a problem
   AttributeIndexRoot = $90,
   AttributeIndexAllocation = $A0,
   AttributeBitmap = $B0,
   AttributeReparsePoint = $C0,
   AttributeEAInformation = $D0,
   AttributeEA = $E0,
   AttributePropertySet = $F0,
   AttributeLoggedUtilityStream = $100,
    );

4
最后一个逗号必须被移除。 - da-soft
你为什么认为自己犯了错误?描述一下你遇到的问题。 - Rob Kennedy
3个回答

12
在C语言中,枚举至少为4个字节,你可以在Delphi中使用{$MINENUMSIZE 4}指令来实现相同的功能。
除了已经提到的最后一个逗号外,你的转换是正确的。尽管有时将枚举翻译为数字常量更好,因为在C语言中,枚举值和整数是可以互换的,而这在Delphi中不是这样的(当然,你可以将枚举强制转换为整数,反之亦然)。

1

看起来没问题,除了中间被注释掉的元素。你遇到了什么问题?


我的问题不是逗号,而是我将一个C语言系统程序转换为Delphi,我认为问题出在枚举类型上。 - micheal
我的问题不是逗号,我正在将一个C语言系统程序转换为Delphi,我认为我的问题在于枚举类型?你觉得呢?这两个结构在所有参数、内存空间等方面是否相同? - micheal

1

我不明白你所说的“有问题”的意思,但如果我删除AttributeLoggedUtilityStream = $100后面的逗号,我就可以编译您转换后的类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接