是否可以在Delphi XE和DataSnap中使用Indy 10.5.8.0?

jac*_*ate 8 delphi indy indy10 delphi-xe

案子

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

这些包成功编译,现在我甚至可以在about box对话框中看到新版本10.5.8.0,但是在IDE重启之后我收到一条消息说:

No se encuentra el punto de entrada del procedimiento @ Idhttp @ TIdCustomHTTP @ GetRequestHeaders $ qqrv en la bibliotecadevínculosdinámicosIndyProtocols150.bpl.

我免费翻译成英文:

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

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

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

与此更改以及其他和类接口中已更改的公共/已发布方法公司一起.

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

AFAIK我无法重新编译dclDataSnapServer150.bpl(也许还有其他失败的软件包,我刚刚停在这里).

IDE上的DataSnap和DevExpress支持对我来说是必须的

问题

  1. 是否有安全的预先建立的路径来更新到最新的Delphi XE INDY?
  2. 如果没有,我是否安全,只需通过创建旧的公共方法并在实现部分调用新的方法来填充源代码?
  3. 我错过了其他的东西,还是我真的坚持使用INDY 10.5.7直到下一个Delphi次要/主要版本?

小智 12

[为Delphi XE安装Indy]

是的,安装过程很繁琐,但要正确完成它是值得的.

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

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

一世.转到组件 - >安装包,然后完全删除所有以"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)
^^^警告:提防非Indy DCU碰巧以字母"id"开头,如"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.)启动Delphi.忽略所有失败的包对话框:这些是依赖于Indy的Embarcadero包!(只需在所有错误上单击"确定",并指示不应再次加载任何失败的包.)

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

F.)转到选项 - >环境选项 - > Delphi选项 - >库路径 - 将步骤C中的新系统,核心和协议文件夹添加到Delphi的库路径.

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


重要:

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

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

将单选按钮设置为"显式重建".

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


  1. Build - System\IndySystem150.dpk
  2. Build - Core\IndyCore150.dpk
  3. 首先构建,然后安装 - Core\dclIndyCore150.dpk
  4. Build - Protocols\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软件包.


小智 7

AFAIK你将失去一些强烈依赖于使用Delphi部署的Indy版本的软件包,最值得注意的是新的Datasnap.

只要所有需要的单元都可用,您可以尝试构建要使用的onwn包而不是无法重新编译的标准包.

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

  • 真正的问题是Indy不应该在给定版本中进行重大更改.恕我直言Indy真的缺乏适当的发布管理,Embarcadero应该控制它,因为它自己的代码依赖.可以在主要版本中进行重大更改,但次要应该只添加不需要更改实际接口的修复或功能.否则他们会疯狂地试图使用Indy构建库的任何开发人员(即EldoS SecureBlackBox与Indy具有相同的问题).可能Embarcadero应该分叉Indy并为此做点什么. (4认同)
  • 卸载像dclDataSnapServer这样的依赖软件包对我来说很糟糕,主要是因为我在我当前的项目中使用了DataSnap.一个更好的解决方案是为每个Indy破坏版本提供一个新的兼容版本,或者让Indy向后兼容的次要版本.诅咒中没有一个在我们手中......也许我会通过Embarcadero支持这个. (2认同)

jac*_*ate 4

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

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

  • 可以只保留 IDE 附带的原始软件包的副本,或者安装更新的 Indy 的单独副本。然后调整项目设置以在 DataSnap 项目中使用原始包,并在其他项目中使用更新的包。 (3认同)
  • 雷米;也许一个不错的 JVCL 风格的 indy 项目安装程序可以备份原始的 INDY,也许一个可以干净地注册/取消注册所有内容的交换工具将是一个好主意。 (3认同)