加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

德尔福7与2009年(和2010年)的记录大小相比

发布时间:2020-12-15 03:52:16 所属栏目:大数据 来源:网络整理
导读:将代码从Delphi 7转换到2010时,我遇到了一个奇怪的问题.它与记录有关.下面定义的记录,在D7中的大小为432字节,在D2009(和2010)中为496.我知道,一个简单的解决方案是使其成为打包记录,然后所有版本都达到426字节……但是,我们将数据存储在流式传输记录的位置,
将代码从Delphi 7转换到2010时,我遇到了一个奇怪的问题.它与记录有关.下面定义的记录,在D7中的大小为432字节,在D2009(和2010)中为496.我知道,一个简单的解决方案是使其成为打包记录,然后所有版本都达到426字节……但是,我们将数据存储在流式传输记录的位置,现在我们正在尝试使用更新的语言读取这些流.
TToTry = Record
 a,b,c,d : Extended;
 e,f,g,h : Extended;
 i : String[15];
 j,k,l,m,n,o,p,q,r,s,t : Array[1..3] of Extended; End;

在调查这个问题时,我创建了另一条记录,无论出于何种原因,大小都是一样的?记录较小,但它具有相同的数据类型.但它在所有版本的语言中都有相同的大小.

TMyRecord = Record
Ext1  : Extended;
Ext2  : Extended;
Ext3  : Extended;
Ext4  : Extended;
Ext5  : Extended;
Ext6  : Extended;
Int1  : Integer;
Int2  : Integer;
char1 : AnsiChar;
char2 : AnsiChar;
MyString  : String[15];
Arr1  : Array[1..3] of Extended;
Arr2  : Array[1..3] of Extended; end;

任何人都知道为什么一个记录如此不同,另一个是相同的?有些与Delphi中的字节边界对齐有关.但是从一个版本到另一个版本的变化如此之大?

解决方法

那么,第一个问题是您将非打包记录存储到磁盘.允许字段和数组打包在产品版本之间进行更改,因为通常内存中的布局在进程外部不可见.你违反了这个规则.

如果Delphi 7和Delphi 2009之间的字节填充默认值发生了变化,请找出D7中的默认值,并在Delphi 2009中将默认值设置为相同.

还要检查阵列打包默认值.我不记得是否有单独的设置.

在调试内存视图中查看Delphi 2009中的记录结构.部分或全部附加大小可能是由于记录本身的填充(不是其中的字段),因此当在阵列中使用记录时,阵列元素处于快速的机器边界上.

如果这些都没有帮助,请在D2009中创建临时打包记录类型,并在实际数据字段之间手动插入字节填充字段,直到记录大小和字段对齐与D7布局匹配.它不仅仅是尺寸,而是场地对齐.使用此临时打包记录读取旧数据文件.然后按字段将数据字段传输到D2009中的“实际”记录类型并写出新文件.

当你在它的时候,在D2009中打包记录类型,这样就不会再发生了.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读