首页 文章

对D2010的更新真的很有意义

提问于
浏览
3

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

  • 我对旧项目使用TntControls . 如果我删除这个库,我必须重新实现一些运行时函数 . 例如:将UnicodeString转换为指定的代码页 .

  • "SizeOf","Length",FillChar()仍然让我困惑 . 如果SizeOf()应替换为Length(),编译器将发出警告 . 但是我还没有找到任何安全的教程 .

  • 尝试将AnsiString强制转换为UnicodeString时出现令人困惑的警告 . 这次谈话不会导致数据丢失,不是吗?

  • 必须重新测试许多代码(zip,string utils等) .

太多令人头疼的问题......有人可以分享将现有项目从一个非常老的delphi迁移到delphi 2010的经验吗?

2 回答

  • 8
    • 如果您已经在代码页之间进行转换,那么是的,切换到Delphi 2010将会导致额外的工作,因为您需要删除Delphi现在处理的内容的代码 . 最终,您的代码将更简单,但在此期间将它放在那里将是一件麻烦事 .

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

    • 编译器在从AnsiString转换为UnicodeString时会发出警告,因为它是一个性能警告,而不是数据丢失警告 . 相反方向的转换都是(即使分配给Utf8String,技术上永远不会丢失来自UnicodeString的数据,如果它只填充有效的Unicode字符) . 避免警告的最佳方法是首先不要使用AnsiString . 使用普通的旧字符串,除了真正需要知道要编码的代码页的代码 .

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

  • 13
    • 将Unicode字符串转换为仅使用Delphi的指定代码页:比以往更简单 . 由于String类能够创建所需代码页的字符串,并从一个代码页完全转换为另一个代码页 .

    • FillChar是字节,而不是字符,名字现在是不幸的 . 真的不是那么令人困惑 .

    • 那个警告让你思考,它做了什么 . 任务完成 .

    • 哦,是的 . 但重新测试和重新阅读对我来说是最大的好处 .

    我已将我的所有项目迁移到Delphi 2009/2010,并发现其中包括以下好处:

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

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

    C.移植没有理由让它成为一种方式 . 我的项目端口实际上都没有永久地“移动”到Delphi 2009/2010中 . 他们都 Build 在两个世界都很好 . 我在我需要它的所有代码中广泛使用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的质量 .

相关问题