如何在Delphi中正确升级Zlib&组件?

时间:2013-08-17 21:37:27

标签: delphi zlib

根据http://zlib.net/消息,目前的版本是1.2.8 可下载为x32和x64 objs。

目前我在机器上有古代版的Delphi。 我正在尝试用它做一些事情并编译​​我的旧项目。

我正处于恢复/安装回/所有以前使用过的组件的阶段, 重新检查演示和示例以刷新内存或技能(几年没有IDE)。

在安装不同组件的过程中,我收到IDE警告 像这样:

无法加载包'dcliteXX'它包含单位'zlib',这也是 包含在DelphiXV0包中。你想尝试吗? 在下次加载项目时加载此包?

然后我在整个/ AddComponents目录中进行文件搜索并找到:

  1. ICS套件,zlib 1.2.3(最新版本),在zlib.pas / icsZlibObj中链接的OBJ
  2. obj's:deflate,inflate,inftrees,adler32,infblock,infcodes,infutil,inffast 还有/ OBJ目录文件:uncompress,compress,crc32,gzio,zutil

    1. 仅限DelphiX / DirectX zlib.dcu 1.1.3

    2. hicomponents zlib.dcu 1.1.3

    3. codebot,两个pas文件链接objs:

    4. BareZLib使用/ zlib中的1.0.4,

      {$L ZLIB\DEFLATE.OBJ} {$L ZLIB\INFLATE.OBJ} {$L ZLIB\INFTREES.OBJ} {$L ZLIB\TREES.OBJ} {$L ZLIB\ADLER32.OBJ} {$L ZLIB\INFBLOCK.OBJ} {$L ZLIB\INFCODES.OBJ} {$L ZLIB\INFUTIL.OBJ} {$L ZLIB\INFFAST.OBJ}

      和BarePNG / pngzlib使用来自/ imgzlib的1.1.4

      同一套objs但不同的版本。

      1. Internet Professional Components zlib.pas for 1.1.3
      2. 同一组objs + zlib C源。

        1. TinyDB ZlibUnit.dcu - 1.1.3,+ zlib源的pascal版本

        2. JEDI ver 1.104 JCL zlibh.dcu 1.2.3

        3. VGVCL单位vgZLib使用zlib,目前为1.1.3

        4. IDE /lib/zlib.dcu为1.0.4:D

        5. 相当混乱


          来自zlib.net的zlib包有win32 objs:

          收缩,膨胀,inftrees,树,adler32,

          infback,infast和... compress,crc32。

          和ZlibEx.pas,ZlibExAPI.pas,ZlibExGZ.pas


          我在第一时间想到:我可以将新的* .obj复制到组件的/ implobj目录中 并重建包以刷新其* .bpl,* .dcp包

          但是 - 我对丢失

          感到困惑

          {$L ZLIB\INFBLOCK.OBJ} {$L ZLIB\INFCODES.OBJ} {$L ZLIB\INFUTIL.OBJ}

          在当前的zlib_archive中。

          第二个想法,如果我操纵我的{Delphi} / lib路径并使用最新的zlib 高位的组件路径所有已编译的项目和重建包都获得新的zlib.dcu。 /测试需要他们将工作/

          第三个想法 - 也许我将所有组件单元声明从Zlib更改为ZlibEx 所有新编译的二进制文件都获得当前的zlib实现/二进制文件。

          并且有人怀疑结束 - 为什么不可能将链接的obj统一到zlib / pngzlib单元? 如果是,那么如何确保png组件适用于新的Zlib版本?

          base of question

1 个答案:

答案 0 :(得分:0)

我认为没有任何新的zlib .obj文件的原因。如果我是你,我会坚持使用组件附带的.obj文件。试图将新的.obj文件放入其中只是在寻找麻烦。您可能必须修改许多组件才能使它们正常工作。为了获得什么收益?

如果您使用的是现代Delphi和最新的组件,那么,如果组件实现得很好,组件将使用Delphi RTL中提供的zlib单元。您可以修改组件以使用单个共享zlib单元。但又一次,获得了什么收益?现在你将使用组件的修改版本,这可能使未来的Delphi升级变得更加复杂。

在我看来,您的主要问题是您有多个设计时包,其中包含一个名为zlib的单元。这就是我要做的事情:

  1. 找出哪些包有冲突单位。
  2. 你真的需要所有的冲突套餐吗?您使用的是所有组件吗?如果没有,请丢弃未使用的。
  3. 也许您在一个项目中需要一个组件,在另一个项目中需要另一个组件?如果是这样,则仅有选择地为使用它们的项目加载包。
  4. 您是否需要设计时间包用于冲突组件?如果没有,如果您没有使用运行时软件包,则不要加载设计时软件包。
  5. 作为最后的手段,将其中一个zlib单元重命名为ComponentNameZlib。这将是冲突的一步。