3

根据http://zlib.net/新闻,当前版本是 1.2.8,可下载为 x32 和 x64 objs。

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

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

在安装不同组件的过程中,我从 IDE 收到如下警告:

无法加载包含单元“zlib”的包“dcliteXX”,该单元也包含在包 DelphiXV0 中。您想在下次加载项目时尝试加载此包吗?

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

  1. ICS 套件,zlib 1.2.3(最新的),在 zlib.pas /icsZlibObj 中链接的 OBJ

obj 的: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:

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

同一组 objs + zlib C 源代码。

  1. TinyDB ZlibUnit.dcu - 1.1.3,+ Pascal 版本的 Zlib 源

  2. JEDI 版本 1.104 JCL zlibh.dcu 1.2.3

  3. VGVCL 单元 vgZLib 使用 zlib,目前是 1.1.3

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

很乱


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

放气, 充气, inftrees, 树, adler32,

infback、infast 和... 压缩、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 版本?

问题的基础

4

1 回答 1

0

我认为没有任何新的 zlib .obj 文件的理由。如果我是你,我会坚持使用组件附带的 .obj 文件。尝试放入新的 .obj 文件只是自找麻烦。您可能必须修改许多组件才能使其正常工作。为了什么收获?

如果您使用的是现代 Delphi 和最新的组件,那么,如果这些组件实现得很好,那么这些组件将使用 Delphi RTL 中附带的 zlib 单元。您可以修改组件以使用单个共享 zlib 单元。但是,又有什么收获呢?现在您将使用组件的修改版本,这可能会使未来的 Delphi 升级更加复杂。

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

  1. 找出哪些包裹有冲突单位。
  2. 你真的需要所有的冲突包吗?您是否使用了所有组件?如果没有,则丢弃未使用的。
  3. 也许您在一个项目中需要一个组件,而在不同的项目中需要一个不同的组件?如果是这样,只为使用它们的项目有选择地加载包。
  4. 您是否需要冲突组件的设计时包?如果没有,并且您没有使用运行时包,则不要加载设计时包。
  5. 作为最后的手段,将其中一个 zlib 单元重命名为 ComponentNameZlib。这将避免冲突。
于 2013-08-18T08:16:05.153 回答