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 包?

你的想法很感激地接受了。

4

2 回答 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 包以用于 DataSnap 项目。

据说下一个版本应该可以让 Indy 更容易更新。

于 2011-06-27T23:03:44.927 回答
2

如果包含所有 DataSnap 源,当然可以使用某种 PE 可执行 analisys 程序来检测 BPL 中使用了哪些类和单元(因为 BPL 只是定制的 DLL)。GExperts 提供了一个非常容易使用的工具。

在 BPL 中,来自 GExperts\PE Information 的导出列表行的格式类似于@xp$@[nn][UnitName]@[TypeName](用于类型)和@[UnitName]{@[Type>]}@[Unit global过程或变量之类的元素](其余部分)。

您可以将该列表保存到文件和 GREP 以获取 BPL 上使用的单位列表。

真实示例(vcl140.bpl):

  • @$xp$11Forms@TForm
  • @Appevnts@TCustomApplicationEvents@Activate
  • @Clipbrd@剪贴板
于 2011-06-27T20:26:59.903 回答