将C语言结构体迁移到Delphi记录类型

5
我想知道如何将C结构体转换为Delphi记录?
以下代码是用C编写的,我想将其转换为Delphi。
typedef struct
  {
  Uint16        value1[32];
  Uint16        value2[22];
  Uint16        value3[8];    
  }MY_STRUCT_1;

提前感谢。

2个回答

11

Uint16相当于Word类型,[]表示一个数组。

MY_STRUCT_1 = record
  value1 : Array [0..31] of Word;
  value2 : Array [0..21] of Word;
  value3 : Array [0..7] of Word;
end;

感谢您的快速回复。这对我非常有帮助。干杯! - sMah

3

你可能需要使用packed关键字。默认情况下,Delphi会根据你所在的平台(我相信是16、32或64位)和记录中包含的数据类型来对齐变量。使用packed将改变所需内存的长度/大小。C会默认压缩结构。

MY_STRUCT_1 = packed record
  value1 : Array [0..31] of Word;
  value2 : Array [0..21] of Word;
  value3 : Array [0..7] of Word;
end;

请参见:http://www.delphibasics.co.uk/RTL.asp?Name=Packed

4
上述记录不需要使用“packed”说明符。现代的Delphi版本使用与C/C++编译器相同的对齐规则。 - kludg
在 Delphi 5 中呢? 'packed' 关键字还需要使用吗? - sMah
wikipedia所述,C结构默认情况下不是紧凑的(编译器会添加填充)。 - Jonaias

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