首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将项目从Delphi 3迁移到Delphi 2010

将项目从Delphi 3迁移到Delphi 2010
EN

Stack Overflow用户
提问于 2009-10-02 23:14:05
回答 7查看 4.3K关注 0票数 5

我被要求重新打开我在1998/99年用Delphi3编写的一个项目,该项目从那时起就一直稳定运行。我有Delphi3的代码库,基于一个老化的Windows98机器,它的存在只是为了保持这个项目的活力。显然,在进行任何重大修改之前,我希望将源代码基础带入21世纪。

我很高兴地注意到Delphi2010(我目前在2007)声称能够从Delphi2开始导入项目。有人有从Delphi 3导入大型项目的经验吗?我能期望这是一个简单的过渡,还是一个困难的过渡?

此外,原始项目还使用了第三方组件,包括DBISAM、WPTools和TMS Planner。我注意到,在Delphi的最新版本中,所有这些都仍然可用。假设我首先将新版本安装到Delphi2010中,我可以期望我的应用程序中使用这些组件的部分也被翻译吗?我知道,自从原始应用程序中使用的版本以来,WPTools至少已经更改了一些组件结构和接口,显然我需要在那里进行一些重新编码,但是程序的这些部分的失败会阻止我的代码库升级吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-10-02 16:20:40

进行这种迁移应该是非常有可能的,根据您的代码是如何编写的,它可能是痛苦的,也可能是不痛苦的。不幸的是,在您开始迁移过程之前,很难说是哪一个。

我要做的第一件事是确保所有的DFM文件都转换为它们的文本表示形式。我相信这在后来的Delphi版本中被设置为默认值,但我记得Delphi3使用的是二进制格式。在Delphi3bin目录中应该有一个名为DFMConvert的实用程序文件,它允许您将DFM转换为文本。这样做的原因是为了确保,如果由于组件未加载而必须手动编辑DFM,则可以读取源代码。您不仅要跳转Delphi的版本,而且还要跳转您使用的每个组件的版本,并且可能存在一些可能导致组件加载失败的不兼容问题。我发现如果是这种情况,并且您有一个“新”版本,那么可以直接使用编辑DFM源代码,并将测试表单及其上的组件与旧版本包含的组件进行比较。删除(或重命名)任何位置不正确的内容,然后再次尝试加载表单。

正如Frabricio提到的,如果您使用变体,那么您将需要对uses子句进行微小的调整。

好消息是,一旦纠正了components/uses子句,代码本身就应该工作得很好。如果你直接转到Delphi 2010,你唯一的其他问题将是Unicode,编译器做了一个很棒的工作,通过错误和警告向你指出所有这些问题。

票数 6
EN

Stack Overflow用户

发布于 2009-10-02 15:35:22

由于您有D2007,并且假设所有这些组件集都带有D2007 dcus,我建议您首先尝试在D2007上重新打开代码库。在那之后,转到D2010,因为实际的VCL的Unicode特性-这可能会产生一些迁移问题(我不会在这里讨论,因为它在web和here on SO上有深入的讨论)。

我之所以这么说,是因为在D5和D7之间的某个地方(没有准确记录)发生了rtl的单元重组(创建了Variants.pas单元并更改了许多OTAPI单元的名称,等等)。所以这将是你的第一个问题出现的地方。编辑:不只是变体被重新定位了,还有很多IDE集成的东西--以避免部署未经许可的代码。如果您有一些OTAPI代码(例如,允许在继承的窗体上发布属性的代码),则需要将其重新定位到包项目中。

正如skramradt所说,您可能必须处理二进制DFM的事情……

在此之后,如果一切正常,请转到Unicode。根据应用程序的不同,这可能很简单,也可能不容易。对于我的人来说,并不是很烦人。但我知道还有其他人比我面临更大的问题。

票数 5
EN

Stack Overflow用户

发布于 2010-10-20 14:25:11

以下是我们在升级到Delphi 2010时所做的一些说明

  1. Delphi2010编译的可执行文件的字节数大约是Delphi3编译的字节数的3倍。
  2. 任何编译都会产生比Delphi3更多的警告和提示。好的做法是删除所有的提示和警告。
  3. 我发现了几个损坏的Pascal文件,它们在Delphi3中编译得很好,但在Delphi2010中却不能。从视觉上看,没有任何问题或差异。但是,编译错误清楚地指示错误行号上的错误。在我的例子中,这个问题与CR/LF有关,在我的Delphi中,只有一个CR。这是一个难以解决的问题,也是一个实时的浪费。但是,可以在记事本中或使用WinHex.exe查看文本。我已经编写了一个名为PARSER.EXE的程序,它允许识别这些控制字符。一旦知道控制字符的位置,这是在记事本中编辑这些文件的最佳方法。
  4. AnsiString.Delphi2010现在使用AnsiStrings、MBCS和WideStrings (UniCode)。与使用ASCII字符串的Delphi 3相反。标准的Delphi2010实现使用字符串作为Unicode,使用字符作为16位字符。现在必须确保许多8位ASCII串被定义为AnsiStrings。显然,具有用PChars定义的接口的旧dlls现在需要PAnsiChar。以下reasons
  5. Delphi 2010具有额外的函数和变量类型,如AnsiStrings.
  6. The
  7. ,版本之间不兼容,因为较新的Delphi版本具有额外的dcus,versions.
  8. The包之间不兼容
  9. 。Delphi2010中没有Crystal Reports,所以你可能需要单独购买。
  10. 许多函数,如读文件、写文件、GettickCount,现在坚持参数为DWORD,而Delphi3则更有容忍度。其中一些功能与更高的disk capacities.
  11. Popup菜单相关联。它们有一个名为AUTOHOTKEY的新属性。此选项应设置为手动。如果设置为默认值,标题将插入‘&’以提供热键功能。
  12. 游标。使用游标的方法已经改变了。
  13. 看起来Delphi2010有一个完整的堆,增加了更多的功能,但代价是使它更易于使用。可能Delphi3有一个更好、更容易使用的interface.
  14. Help.也许比Delphi 3更好,但似乎在寻找帮助信息的过程中消失了几分钟。交互式帮助是一个nuisance.
  15. BorlandMM.dll不工作的Windows2000与Delphi2010应用程序。因此,如果您想使用此动态链接库,则可能需要升级大量PC。

我有大约100个应用程序、dll和COM服务器需要升级。大约12周的调试工作。希望这能有所帮助。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1510168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档