我被要求重新打开我在1998/99年用Delphi3编写的一个项目,该项目从那时起就一直稳定运行。我有Delphi3的代码库,基于一个老化的Windows98机器,它的存在只是为了保持这个项目的活力。显然,在进行任何重大修改之前,我希望将源代码基础带入21世纪。
我很高兴地注意到Delphi2010(我目前在2007)声称能够从Delphi2开始导入项目。有人有从Delphi 3导入大型项目的经验吗?我能期望这是一个简单的过渡,还是一个困难的过渡?
此外,原始项目还使用了第三方组件,包括DBISAM、WPTools和TMS Planner。我注意到,在Delphi的最新版本中,所有这些都仍然可用。假设我首先将新版本安装到Delphi2010中,我可以期望我的应用程序中使用这些组件的部分也被翻译吗?我知道,自从原始应用程序中使用的版本以来,WPTools至少已经更改了一些组件结构和接口,显然我需要在那里进行一些重新编码,但是程序的这些部分的失败会阻止我的代码库升级吗?
发布于 2009-10-02 16:20:40
进行这种迁移应该是非常有可能的,根据您的代码是如何编写的,它可能是痛苦的,也可能是不痛苦的。不幸的是,在您开始迁移过程之前,很难说是哪一个。
我要做的第一件事是确保所有的DFM文件都转换为它们的文本表示形式。我相信这在后来的Delphi版本中被设置为默认值,但我记得Delphi3使用的是二进制格式。在Delphi3bin目录中应该有一个名为DFMConvert的实用程序文件,它允许您将DFM转换为文本。这样做的原因是为了确保,如果由于组件未加载而必须手动编辑DFM,则可以读取源代码。您不仅要跳转Delphi的版本,而且还要跳转您使用的每个组件的版本,并且可能存在一些可能导致组件加载失败的不兼容问题。我发现如果是这种情况,并且您有一个“新”版本,那么可以直接使用编辑DFM源代码,并将测试表单及其上的组件与旧版本包含的组件进行比较。删除(或重命名)任何位置不正确的内容,然后再次尝试加载表单。
正如Frabricio提到的,如果您使用变体,那么您将需要对uses子句进行微小的调整。
好消息是,一旦纠正了components/uses子句,代码本身就应该工作得很好。如果你直接转到Delphi 2010,你唯一的其他问题将是Unicode,编译器做了一个很棒的工作,通过错误和警告向你指出所有这些问题。
发布于 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。根据应用程序的不同,这可能很简单,也可能不容易。对于我的人来说,并不是很烦人。但我知道还有其他人比我面临更大的问题。
发布于 2010-10-20 14:25:11
以下是我们在升级到Delphi 2010时所做的一些说明
我有大约100个应用程序、dll和COM服务器需要升级。大约12周的调试工作。希望这能有所帮助。
https://stackoverflow.com/questions/1510168
复制相似问题