【问题标题】:Is it possible to recompile the DataSnap packages in Delphi XE with a new/different version of Indy?是否可以使用新的/不同版本的 Indy 重新编译 Delphi XE 中的 DataSnap 包?
【发布时间】:2011-09-23 17:48:53
【问题描述】:

好的——我们有一个有趣的问题。

一些背景:

  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 版本?换界面了吗?
  • 我一直无法找到这些包的 DPK。
  • @David -- 嗯。不确定。检查....他们说他们不相信。这可能是解决方案的途径——将我们的修复应用到发布版本。我们一直在使用较新版本的 Indy,但 XE 发布版本可能会起作用。
  • @Nick 我不太确定这些东西之间的联系是如何工作的,我对 Indy 和 DataSnap 一无所知。但在我看来,只要 Indy 的接口是 DataSnap 所期望的,那么它就没有理由拒绝它。如果界面发生变化,那么您会收到可怕的“foo.dcu was compiled with a different version of bar.dcu”消息。
  • @David:问题是有时 Indy 会在“次要”版本中破坏接口,不幸的是。这使得在不重建(和修复)依赖库的情况下切换到新版本是不可能的。 Delphi 不发布包代码可能是为了避免人们轻松部署他们自己的标准包版本(但我想切换到更强大的模型会更好,即签署标准包、强名称等),同时让包重新编译如果需要的话。但霍奇斯应该比我们更了解这一切,因为他是德尔福的产品经理……

标签: delphi packages indy datasnap


【解决方案1】:

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

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

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

真实示例(vcl140.bpl):

  • @$xp$11Forms@TForm
  • @Appevnts@TCustomApplicationEvents@Activate
  • @Clipbrd@Clipboard

【讨论】:

    【解决方案2】:

    普遍认为不,这是不可能的,因为并非所有资源都由 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 是针对 Indy 编译的 IDE 附带的软件包,以及 DataSnap 最终无法重新编译 用户。如果您需要使用 DataSnap, 那么你需要维护 原始 Indy 10 包用于 DataSnap 项目。

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

    【讨论】:

    • Embarcadero 将在即将发布的 XE2 版本中解决 DataSnap/Indy 问题,以便用户可以独立升级 Indy,而无需再破坏 DataSnap。
    • @Mjn:问题是 DataSnap 是一个 Delphi 库......你不应该使用整个 RTL/VCL,因为你没有完整的源代码(包......)! :D
    • 您确实拥有 RTL 和大部分 VCL 的完整源代码,只是没有 datasnap 和一些其他“架构师/企业”SKU 元素。我真的希望这在 XE2 中得到修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 2016-10-19
    • 2011-12-27
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    相关资源
    最近更新 更多