5

我有一个用 Delphi 2007 编写的相当大的(免费软件)项目,它同时使用TntUnicodeControls了库和TntLXControls库,我计划迁移到 Delphi 2009。

不幸的是,我在我的项目中到处使用这些库:

  • 替换 VCL 控件以提供 Unicode 功能
  • Win32 API 包装器(主要用于比较字符串)
  • TntLXForms, TntLXRegistry, ...的功能增强
  • 使用TntControls. (VirtualTrees、SpTBXLib、D2009 更新可用)

您对将此类项目移植到 Delphi 2009 有任何经验和/或建议吗?是否建议先切换到(商业)TMSUnicode 控件?

4

4 回答 4

5

安装 GExperts;有一个“替换组件”IDE 插件可以帮助将 TTntXXX 转换为 TXXXX 控件。试一次,如果没问题,只需检查“替换项目中的任何地方”。

SpTbx 和 VirtualTrees 只能重新编译 - 它们都支持 D2009。

如果您使用 WinAPI 包装器只是为了调用 Unicode API-s,它们也应该在 D2009 中工作。

剩下的就是 TntLX 控件(TntLXForms、TntLXRegistry、...)。由于它们不受支持,因此无论如何可能是更改它们的好时机。

于 2008-12-26T10:03:24.983 回答
4

我可以帮助解决其中的一些问题,因为我正在移植一个从 2007 年到 2009 年使用 TNT 的 C++Builder 应用程序。在 D2009 中切换到 Unicode 是迟到的,并且值得欢迎。然而,不幸的是,对于那些过去不需要 unicode 并且可能仍然不需要的人来说,过渡可能更容易。如果像我一样,您需要 Unicode 并使用 Troy Wolbrink 强大的 TNT 控件来提供它,那么您的工作就相当复杂了……

好消息是,TMS Software推出了支持 D2009 的新版本 TNTControls。我没有看过这个,但希望它只是原生 VCL 组件之上的一个“外观”层,以简化可移植性。我会考虑是否可以重建您的其他库以使用它。

但是,您最好回到原生 VCL 控件,原因是字符串类型。TNT 控件一直使用 WideString 来回传递 Unicode 字符串,您可能会在自己的代码中分散使用 WideString。这会起作用,但它并不理想,因为 WideString 应该只用于 COM 互操作,因为它“包装”了 COM BSTR 类型。D2009 中的本机 unicode 字符串是引用计数的,应该会明显更快。

如果您决定用原生 VCL 替换 TNT 组件,您可以使用 GExperts“替换组件”命令 - 或者,也许更简单,在您的 .DFM 和 .PAS 文件中进行搜索和替换(您确实有文本形式的文件,你不是)用T替换TTNT。

于 2008-12-26T10:04:31.987 回答
3

我推荐以下资源:

Marco Cantu 的 Delphi 2009 手册第 3 章(移植到 unicode) http://www.marcocantu.com/dh2009/

Nick Hodges 的文章(Unicode 世界中的 Delphi) http://blogs.codegear.com/nickhodges/2008/11/20/39149

于 2008-12-26T13:02:02.140 回答
1

我认为无论哪种方式都会有很多工作。可能比您之前没有完成所有工作以使其兼容 unicode 更重要。我个人会忘记 tms Unicode 控件,然后回到 vcl。这将在未来节省更多的痛苦。(请注意,没有违反这些控件的内容。)

另请记住,D2009 的字符串与 D2007 的 Widestring 不同,您在应用程序中无疑使用了后者。所以所有 Widestring 实例,你从 string(它是 AnsiString)如此努力地改变,需要再次回到 string(现在是 unicodestring)。

于 2008-12-26T09:54:36.217 回答