【问题标题】:Migrate C struct to Delphi record将 C 结构迁移到 Delphi 记录
【发布时间】:2012-02-20 04:43:21
【问题描述】:

我想知道如何将C 结构体转换为Delphi 记录

下面的代码是C,我想转成Delphi。

typedef struct
  {
  Uint16        value1[32];
  Uint16        value2[22];
  Uint16        value3[8];    
  }MY_STRUCT_1;

提前致谢。

【问题讨论】:

    标签: c delphi data-structures struct record


    【解决方案1】:

    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;
    

    【讨论】:

    • 感谢您的快速回复。它对我有很大帮助。干杯
    【解决方案2】:

    您可能需要使用 packed 关键字。默认情况下,Delphi 将根据(我相信)您是在 16 位、32 位还是 64 位平台上进行开发以及您的记录中包含哪些数据类型来对齐变量。使用打包将更改保存记录所需的内存长度/大小。 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

    【讨论】:

    • 以上记录不需要packed说明符。现代 Delphi 版本使用与 C/C++ 编译器相同的对齐规则。
    • 在 Delphi 5 中呢? “打包”还需要使用吗?
    • wikipedia 中所述,默认情况下不打包C 结构(编译器添加填充)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多