在Delphi XE中,是否可以使用新/不同版本的Indy重新编译DataSnap包?

9

好的,我们面临一个有趣的问题。

一些背景:

  1. 我们的主要应用程序使用Indy 10。然而,我们会拿Indy 10源代码修复其中的错误,重新编译,并安装我们自己的一套Indy组件。

  2. 我们正在迁移到Delphi XE,并希望开始使用DataSnap。

  3. DataSnap需要“官方的、发布的”版本的Indy,这与我们定制的Indy版本不兼容。

  4. 我们的DataSnap服务器将是单独的应用程序,但由于我们在IDE中安装了自己的Indy,因此我们无法“交叉流”。

因此,由于这个兼容性问题,我们无法直接使用Delphi XE的DataSnap。

那么我的问题是:

是否可以使用新/不同版本的Indy重新编译Delphi XE中的DataSnap包?

感谢您的想法。


为什么DataSnap与您的Indy版本不兼容?您是否更改了接口? - David Heffernan
我曾经通过使用Sysinternals ShellRunAs以另一个用户身份启动Delphi(加载不同的包和搜索路径)来解决类似的问题。需要一些工作来配置两个Delphi版本,特别是在保持它们更新时。 - Uwe Raabe
@Uwe:使用IDE的-p参数不是更容易吗? - afrazier
如果只是使用不同的注册表部分来使用IDE,那么可以。但我还必须为ModelMaker Code Explorer使用不同的设置,它不关心 -p 选项。 - @afrazier - Uwe Raabe
3
@David: 问题在于Indy有时候即使在“小版本”中也会破坏接口,不幸的是。这就使得在不重新构建(和修复)依赖库的情况下无法切换到新版本。Delphi没有提供软件包代码,可能是为了避免人们轻易地部署自己的标准软件包版本(但我想更好的方法是切换到更强大的模型,比如签名标准软件包、强名称等),同时允许必要时重新编译软件包。但是作为Delphi产品经理,Hodges应该比我们更清楚这些情况。 - user160694
显示剩余4条评论
2个回答

3
普遍认为不行,因为Embarcadero没有提供所有源代码,并且其中一些源代码依赖于Indy的构建方式(这对最终用户来说非常令人沮丧,因为随Delphi一起发行的Indy版本相对较旧,有时所选的版本并不一定是很好的版本)。
请参阅相关的 SO 问题:Is it possible to use Indy 10.5.8.0 in Delphi XE and DataSnap? 还可以参见 Indy 项目页面:http://www.indyproject.org/Sockets/Docs/indy10Installation.de.aspx,该页面指出:
注意:在 D/CB/RAD 2009+ 中,DataSnap 内部使用 Indy 10。安装新版本的 Indy 将使 DataSnap 无法使用,因为它将无法再加载 Indy 包。DataSnap 是根据 IDE 附带的 Indy 包编译的,不能由最终用户重新编译。如果需要使用 DataSnap,则需要维护用于 DataSnap 项目的原始 Indy 10 包。
据说下一个版本有望允许更容易地更新 Indy。

4
Embarcadero将在即将发布的XE2版本中解决DataSnap/Indy问题,因此用户可以独立升级Indy而不会再破坏DataSnap。 - Remy Lebeau
1
@Mjn:问题在于DataSnap是Delphi库...你也不应该使用整个RTL/VCL,因为你没有完整的源代码(包...)!:D - user160694
1
你确实拥有RTL和大部分VCL的完整源代码,只是没有Datasnap和其他一些“Architect/Enterprise” SKU元素。我真的希望这在XE2中得到修复。 - Warren P

2
如果所有的 DataSnap 源代码都包含在内,当然可以使用某种 PE 可执行文件分析程序来检测在 BPL 中使用了哪些类和单元(因为 BPL 只是定制的 DLL)。GExperts 提供了一个非常易于使用的程序。
在 BPL 中,从 GExperts\PE 信息导出列表的行具有以下格式:@xp$@[nn][UnitName]@[TypeName] (用于类型) 和 @[UnitName]{@[Type>]}@[Unit global element like procedures or variables] (用于其余部分)。
您可以将该列表保存到文件中,并使用 GREP 获取在 BPL 上使用的单元列表。
实际示例 (vcl140.bpl):
  • @$xp$11Forms@TForm
  • @Appevnts@TCustomApplicationEvents@Activate
  • @Clipbrd@Clipboard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接