Delphi6项目迁移到Delph7时最常见问题计算机二级考试

文章作者 100test 发表时间 2009:05:07 18:06:36
来源 100Test.Com百考试题网


  一个遗留的老项目,原来是在Delphi 6(D6)环境下开发和编译的。这两天计划将其迁移到Delphi 7(D7)下,结果使用D7编译后的新程序不能正常运行,出现某些界面打不开的情况。经跟踪测试发现原来在D6下可正常执行的代码在D7中发生了“死循环”的情况。
  D6与D7版本之间的差异应该说还是比较小的,怎么会出现这种情况呢?查阅了D7的What’s New文档,终于找到了缘由。
  原来在出错的代码段中使用了常见的系统字符串函数LeftStr、RightStr。根据文档说明,D7中修改了它们的实现,目的是为了支持多字节字符集,比如汉字。除了以上两个函数外,还包括一个MidStr。
  这一组字符串函数的功能是取字符串的子串,位于StrUtils单元。在D6中,他们只有一种实现,参数与返回值类型都是String(默认为AnsiString)。而在D7中,分别有单字节和多字节两种实现,即AnsiString和WideString版本。这样,如果参数中存在汉字或全角符号等双字节的字符,会自动调用到WideString版本,从而导致出现了不希望的结果。
  打开StrUtils单元,比较D6和D7的对应部分,一目了然。(以LeftStr为例)
  D6
  function LeftStr(const AText: string. const ACount: Integer): string.
  begin
  Result := Copy(AText, 1, ACount).
  end.
  D7
  function LeftStr(const AText: string. const ACount: Integer): string.
  begin
  Result := Copy(AText, 1, ACount).
  end.
  function LeftStr(const AText: WideString. const ACount: Integer): WideString. overload.
  begin
  Result := Copy(AText, 1, ACount).
  end.
  function LeftBStr(const AText: AnsiString. const AByteCount: Integer): AnsiString.
  begin
  Result := Copy(AText, 1, AByteCount).
  end.
  function AnsiLeftStr(const AText: AnsiString. const ACount: Integer): AnsiString.
  begin
  Result := LeftStr(AText, ACount).
  end.
  举例说明:
  ShowMessage( LeftStr(‘中华人民共和国’, 2)).
  同样一行代码在D6中将会显示“中”,D7中显示“中华”。
  但如果参数不含有多字节字符,全部是单字节字符,则不会有问题。
  如:
  ShowMessage( LeftStr(‘China’, 2)).
  在D6和D7中都将显示“Ch”。
  那么,如果代码中大量使用了以上三个字符串函数,在迁移时如何处理呢?
  实际上Delphi的工程师们已经为我们准备好了保持兼容的简单方法。那就是为上述三个函数准备了对应的兼容版本,名称分别为LeftBStr、RightBStr和MidBStr。也就是说,只要将原有代码中的LeftStr、RightStr和MidStr分别作替换即可。当然,如果确定这些函数仅可能会处理单字节字符,则可以不作任何变动。

  特别推荐:

  2009年9月全国计算机等级考试时间及科目预告

  2009年上半年全国计算机等级考试参考答案请进入计算机考试论坛

  2009年全国计算机等级考试报名信息汇总

  2009年NCRE考试有新变化

  2009年全国计算机等级考试-大纲

  2009年上半年全国计算机二级考试试题及答案

  2009年上半年全国计算机等级考试试题答案汇总



相关文章


计算机二级DELPHI:thread中实现消息循环计算机二级考试
DELPHI中创建语言资源文档DLL的方法计算机二级考试
delphi程序恢复ctrl space切换输入法计算机二级考试
计算机二级:Delphi数据网格自动适应宽度计算机二级考试
Delphi6项目迁移到Delph7时最常见问题计算机二级考试
窗体的扩展样式GWL_EXSTYLE:用于SetWindowLong计算机二级考试
计算机二级:Delphi自动获取软件版本信息的类计算机二级考试
计算机二级:DELPHI7安装QuickReport后计算机二级考试
DelphiIDE向导代码竟然有二套ClassType计算机二级考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛