8

案子

我正在尝试将 INDY 更新到我的 Delphi XE(更新 1)的最新版本,所以我从 indy.fulgan.com/ZIP 下载了最新的 INDY10 文件(Indy_4545.zip

包编译成功,现在我什至可以在关于框对话框中看到新版本 10.5.8.0,但在 IDE 重新启动后,我收到一条消息:

没有看到 encuentra el punto de entrada del procedimiento @Idhttp@TIdCustomHTTP@GetRequestHeaders$qqrv en la biblioteca de vínculos dinámicos IndyProtocols150.bpl。

我的免费英语翻译:

在动态链接库 IndyProtocols150.bpl 上找不到过程 @Idhttp@TIdCustomHTTP@GetRequestHeaders$qqrv 的入口点。

在快速比较新旧 IdHTTP.pas 后,我发现 TIdCustomHttp 类有很多变化,包括一些方法的重命名

  • GetResponseHeaders 到 GetResponse
  • GetRequestHeaders 到 GetRequest
  • SetRequestHeaders 到 SetRequest

随着在这个和其他和类接口中更改的公共/发布方法公司。

更新后,我得到了很多无法加载的包,包括 dclcxPivotGridOLAPD15.bpl,它又依赖于 dclDataSnapServer150.bpl,它遇到了 bpl 上的缺失方法。

AFAIK 我无法重新编译 dclDataSnapServer150.bpl (可能还有其他失败的包,我只是停在这里)。

IDE 上的 DataSnap 和 DevExpress 支持是我日常工作的必需品,所以

问题

  1. 是否有安全的预先建立的路径来更新到 Delphi XE 的最新 INDY?
  2. 如果不是,我是否可以通过创建旧的公共方法来压缩源代码并在实现部分调用新的方法来保证安全?
  3. 我是否遗漏了其他东西,或者我真的坚持使用 INDY 10.5.7 直到下一个 Delphi 次要/主要版本?
4

4 回答 4

12

[为 Delphi XE 安装 Indy]

是的,安装过程很乏味,但把它做好是值得的。

这适用于除 SSL 之外的所有 Indy 组件。(我还没有尝试过任何 SSL 的东西。)

A.)寻找并销毁 Delphi 附带的所有 Indy 文件。这些都不好,因为 Indy 项目每天都会更新新的错误修复。如果 Delphi 选择任何旧文件而不是新的新 Indy 库,那么您将在所有不同时间从 IDE 中得到疯狂的错误,这些错误很难追踪。

一世。转到 Component-->Install Packages,然后完全删除所有以“Indy”开头的包。

ii. 关闭德尔福。

iii. 从 Delphi 的 Bin 文件夹中删除所有匹配 "dclIndy*.bpl" 和 "Indy*.bpl" 的文件。
(C:\Program Files\Embarcadero\RAD Studio\8.0\bin)

iv. 删除 Delphi 的 Lib 子文件夹中所有匹配 "Indy*.dcu" 和 "Id*.dcu"^^^ 的文件。
(C:\Program Files\Embarcadero\RAD Studio\8.0\lib\win32\debug)
(C:\Program Files\Embarcadero\RAD Studio\8.0\lib\win32\release)
^^^ 警告:注意非恰好以字母“id”开头的 Indy DCU,例如“idispids.dcu”和“idoc.dcu”

v. 删除整个 Indy10 源文件夹:
(C:\Program Files\Embarcadero\RAD Studio\8.0\source\Indy10)

B.)从http://indy.fulgan.com/ZIP/下载最新的 Indy10_XXXX.zip (如果使用此 zip 文件执行以下任何步骤时出现编译错误或运行时错误 - 不要气馁!第二天重新下载 zip 文件,然后重试。此 zip 文件每天都会更新,任何一天都有可能出现一些错误/错误。)

C.)仅将 System、Core 和 Protocols 文件夹提取到您自己的 Indy 库文件夹中。前任。
(c:\MyDelphiComponents\Indy\Core)
(c:\MyDelphiComponents\Indy\System)
(c:\MyDelphiComponents\Indy\Protocols)

D.)启动德尔福。忽略所有失败的包对话框:这些是依赖 Indy 的 Embarcadero 包!(只需在所有错误上单击确定,并指示不应再次加载任何失败的包。)

E.)转到选项-->环境选项-->Delphi 选项-->浏览路径 - 删除以 $(BDS)\Lib\Indy10 开头的路径

F.)转到 Options-->Environment Options-->Delphi Options-->Library Path - 将步骤 C 中的新 System、Core 和 Protocols 文件夹添加到 Delphi 的库路径中。

G.)按顺序执行以下 5 项操作:(只需对有关升级项目的任何对话框说 OK。)


重要的:

在加载每个 dpk 之后和每次构建之前,转到:

项目-->选项-->描述-->构建控制

将单选按钮设置为“显式重建”。

(实际上,这是可选的,但我总是使包显式重建,因为它们似乎更容易处理,但我想听听其他人对此的看法......)


  1. 构建 - System\IndySystem150.dpk
  2. 构建 - Core\IndyCore150.dpk
  3. 先构建,然后安装 - Core\dclIndyCore150.dpk
  4. 构建 - 协议\IndyProtocols150.dpk
  5. 先构建,然后安装 - Protocols\dclIndyProtocols150.dpk

** 仔细检查您是否在所有软件包上设置了“显式重建”!**

H.)最后,转到 Component-->Install Packages 并找到在步骤 D 中关闭的所有依赖 Indy 的包。重新激活它们,然后重新启动 Delphi。(如果您的新 Indy 与 Delphi 发布的版本相比没有太大变化,那么这些软件包将使用新的 Indy!)

++ 注意,在重新激活这些 Embarcadero 软件包时,您可能不会立即收到任何错误,但它们可能会在以后随机弹出。例如,我刚刚安装了 Indy10_4548.zip,所有重新激活的包看起来都很好。一天后,IDE 突然向我发送了一条消息,说它在 TIdCustomHTTP 中找不到 GetRequestHeaders,因此 dclWindowsAzureManagement150.bpl 遇到了问题。所以我不得不返回并在 IDE 中禁用该 Windows Azure 包。

于 2011-01-14T18:41:18.053 回答
7

AFAIK,您将丢失一些严重依赖于使用 Delphi 部署的 Indy 版本的软件包,尤其是新的 Datasnap。

只要所有需要的单元都可用,您可以尝试构建您的 onwn 包以代替无法重新编译的标准包。

恕我直言,Embarcadero 应该根据像 Indy 这样的“不稳定”库找到关于其自己代码的解决方案。这在专业环境中是不可接受的,特别是因为他们无法发布官方更新,包括 Indy 发布后几个月的错误修复。例如,我最近发现 Indy 10.5.5 邮件消息解析会截断邮件地址,这在 10.5.8 中不会发生。当然不能接受10.5.5的行为,我被迫升级...

于 2010-12-31T13:04:43.223 回答
4

从其他人的答案,主要是雷米的评论:

如果不破坏 Delphi XE Update 1 中的 DataSnap,就无法安装 Indy 10.5.8.0。

于 2011-01-31T15:20:40.537 回答
2

虽然我自己用的不是Delphi XE,而是2010版。在这篇 Stack Overflow 帖子的帮助下,我能够将 Indy 组件升级到最新版本:在 Delphi 2009 中逐步升级 Indy 10

我知道这个问题是针对 2009 年的(但答案也涵盖了 2010 年),但它在 2010 版中对我有用,所以我猜它也会对你有所帮助。我建议您阅读评论,因为那里也有一些很好的提示。希望这可以帮助。

于 2010-12-30T23:46:19.277 回答