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

字符串问题将Delphi 3迁移到Delphi 2010

发布时间:2020-12-15 09:31:20 所属栏目:大数据 来源:网络整理
导读:我得到了一个较旧项目的来源,并且必须改变一些小东西,但是我遇到了大麻烦,因为我只有delphi 2010才能做到这一点. 有一个记录定义: bbil = record path : string; pos: byte; nr: Word;end; 以后这个定义用于从文件中读取: b_bil: file of bbil;pbbil: ^bbi
我得到了一个较旧项目的来源,并且必须改变一些小东西,但是我遇到了大麻烦,因为我只有delphi 2010才能做到这一点.

有一个记录定义:

bbil = record
  path : string;
  pos: byte;
  nr: Word;
end;

以后这个定义用于从文件中读取:

b_bil: file of bbil;
pbbil: ^bbil;
l_bil : tlist;

while not(eof(b_bil)) do
  begin
    new(pbbil);
    read(b_bil,pbbil^);
    l_bil.add(pbbil);
  end

主要问题是,编译器不接受记录中的“字符串”类型,因为他想要“完成”.
所以我试着将“string”改为“string [255]”或“shortstring”.这样做应用程序正在读取文件但内容错误.

我的问题是如何将用于编写文件的旧“字符串”类型转换为Delphi 2010中的“新”类型.

我已经尝试过很多例如“{$H-}”.在记录显示中只添加一个char更多,文件是正确的,因为文件读取几乎正确但每个数据集截断一个char更多 – lengthbyte 255chars的长度似乎是正确的fpr定义但shorttring不匹配.

解决方法

伊克!您的代码看起来像是早期或不使用长字符串.如果你想获得与旧Delphi相同的行为,那么你需要用ShortString替换字符串.

我看到你已经尝试过并报告它失败了.它实际上是唯一对我有意义的解释,因为所有其他字符串类型本质上都是指针,因此读取可能有效的唯一方法是使用ShortString.你正在尝试的迁移是巨大的,你可能有大量的混杂问题.

@LU RD在评论中提出了一个很好的观点,即由于您没有使用打包数组,因此Delphi版本之间的记录布局可能会有所不同.您可以使用手头的两个Delphi版本来调查记录布局.您需要安排记录的大小在不同版本之间匹配,并且字段的偏移量也匹配.

根据以下注释,在pos和nr之间添加填充字节将解决您的问题.

bbil = record
  path : string;
  pos: byte;
  _pad: byte;
  nr: Word;
end;

您也可以通过将$ALIGN编译器选项设置为{$ALIGN ON}来实现相同的效果,这就是我认为我会做的事情.

从长远来看,你真的应该远离短字符串,ANSI编码,内部记录和数据文件之间的直接映射等等.在短期内,您可能最好不要使用与构建此代码并使用它相同版本的Delphi.我希望这个问题只是冰山一角.

(编辑:李大同)

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

    推荐文章
      热点阅读