我正在尝试将自己的项目迁移到delphi 2010.但它似乎非常困难。
太多头痛......有人可以分享将现有项目从一个非常老的delphi迁移到delphi 2010的经验吗?
答案 0 :(得分:13)
我已将我的所有项目迁移到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)
如果您正在使用Tnt并且您已经在代码页之间进行转换,那么是的,切换到Delphi 2010会导致额外的工作,因为您需要删除代码德尔福现在处理的事情本质上。最终,您的代码会更简单,但在此期间获取代码将是一件麻烦事。
SizeOf,Length和FillChar是非常基本的概念,作为专业软件开发人员,您应该了解自己。要知道你是在处理字符数据还是非字符数据,并且在处理后者时,不要使用与字符相关的类型。你有TBytes;用它。不要将字符串用作字节缓冲区。当你想知道你有多少字节时,使用SizeOf;当你想知道你有多少“东西”时,请使用长度。一般避免FillChar;你可能不需要它,就像你今天使用它一样多。由于事物被填充的“char”无论如何几乎总是零,你可以考虑使用ZeroMemory。它具有较少的参数,并且与FillChar一样快,特别是因为Delphi支持函数内联。
编译器在从AnsiString转换为UnicodeString时会发出警告,因为它不是简单的字符串赋值,而是转换,保证分配更多内存并一次复制一个字符。这是一个性能警告,而不是数据丢失警告。相反方向的转换是两者(即使分配给Utf8String,技术上永远不会丢失来自UnicodeString的数据,如果它只填充有效的Unicode字符)。避免警告的最佳方法是首先不要使用AnsiString。使用普通的旧字符串,但代码确实需要知道要编码的代码页。
我认为“重新测试”的论点非常强烈。库代码尤其应该具有您每次重新编译时都运行的单元测试。重新测试是你每天做几次的事情;除非出现问题,否则不会有特别的努力。