对D2010的更新真的很有意义

时间:2009-12-02 00:55:28

标签: delphi unicode migration

我正在尝试将自己的项目迁移到delphi 2010.但它似乎非常困难。

  1. 我将TntControls用于旧项目。如果我删除这个库,我必须重新实现一些运行时函数。例如:将UnicodeString转换为指定的代码页。
  2. “SizeOf”,“Length”,FillChar()仍然让我困惑。如果SizeOf()应替换为Length(),编译器将发出警告。但是我没有为我找到任何安全的教程。
  3. 在尝试将AnsiString强制转换为UnicodeString时出现令人困惑的警告。这个对话不会导致数据丢失,不是吗?
  4. 必须重新测试许多代码(zip,string utils等)。
  5. 太多头痛......有人可以分享将现有项目从一个非常老的delphi迁移到delphi 2010的经验吗?

2 个答案:

答案 0 :(得分:13)

  1. 将Unicode字符串转换为仅使用Delphi的指定代码页:比以往更简单。感谢String类能够创建所需代码页的字符串,并从一个代码页转换到另一个代码页。
  2. FillChar是字节,而不是字符,名字现在很不幸。真的不是那么令人困惑。
  3. 那个警告会让你思考,它做了什么。完成工作。
  4. 哦,是的。但重新测试和重新阅读对我来说是最大的好处。
  5. 我已将我的所有项目迁移到Delphi 2009/2010并发现其中的好处:

    一个。彻底重新阅读我的代码带来了我需要清理它的许多方法(因为它是一堆臃肿的旧事故和增量代码污泥,就像大多数RAD / delphi项目最终一样),其中很少是纯粹的unicode或端口相关的,但所有这些都使产品更好地被迫通过变化。

    B中。一个更清洁的世界,拥有更少的第三方组件。删除TNT以及十几个或第二个第三方组件将使您的项目更小,更正交,更容易支持。

    ℃。移植没有理由让它成为一种方式。我的项目端口实际上都没有永久地“移动”到Delphi 2009/2010中。他们都建立在两个世界都很好。我在我需要它的所有代码中广泛使用UnicodeString类型,并且在Delphi 2007或更早版本上编译时,我为WideString创建了一个typedef。

    d。 delphi 2010 ide在Windows Vista和Windows 7上运行良好,语言很愉快。 Delphi 2009和2010并没有崩溃,Delphi 2007和Delphi 7经常为我做。

    如果您不需要支持Vista和Win7,并且您100%快乐且无故障运行TNT组件,并且您的应用程序不会让您赚钱,那么请将它留在原地。如果它能让你赚钱,那就投入你的时间,你很快就会看到奖励。 Delphi 2010和2009很容易成为有史以来最好的delphi版本,唯一令人头疼的问题是,自从他们移出WinHelp格式的帮助文件以来,文档仍然低于Delphi 7的质量。

答案 1 :(得分:8)

  1. 如果您正在使用Tnt并且您已经在代码页之间进行转换,那么是的,切换到Delphi 2010会导致额外的工作,因为您需要删除代码德尔福现在处理的事情本质上。最终,您的代码会更简单,但在此期间获取代码将是一件麻烦事。

  2. SizeOf,Length和FillChar是非常基本的概念,作为专业软件开发人员,您应该了解自己。要知道你是在处理字符数据还是非字符数据,并且在处理后者时,不要使用与字符相关的类型。你有TBytes;用它。不要将字符串用作字节缓冲区。当你想知道你有多少字节时,使用SizeOf;当你想知道你有多少“东西”时,请使用长度。一般避免FillChar;你可能不需要它,就像你今天使用它一样多。由于事物被填充的“char”无论如何几乎总是零,你可以考虑使用ZeroMemory。它具有较少的参数,并且与FillChar一样快,特别是因为Delphi支持函数内联。

  3. 编译器在从AnsiString转换为UnicodeString时会发出警告,因为它不是简单的字符串赋值,而是转换,保证分配更多内存并一次复制一个字符。这是一个性能警告,而不是数据丢失警告。相反方向的转换是两者(即使分配给Utf8String,技术上永远不会丢失来自UnicodeString的数据,如果它只填充有效的Unicode字符)。避免警告的最佳方法是首先不要使用AnsiString。使用普通的旧字符串,但代码确实需要知道要编码的代码页。

  4. 我认为“重新测试”的论点非常强烈。库代码尤其应该具有您每次重新编译时都运行的单元测试。重新测试是你每天做几次的事情;除非出现问题,否则不会有特别的努力。