我的程序(DB)(由Delphi7 编写)在Firebird下工作。在 PC 上还有Delphi10.2(带有它的Client InterBase)。
该程序使用“ IBBackupService1 ”组件,该组件使用“ GetNextLine 方法”。
一段时间以来,此方法一直在抛出错误:
“…… 异常类 EIBInterBaseError 与消息“不可用的数据库未知 ISC 错误 336330835”
我读到这是由于gds32.dll程序错误拾取。没错,我的 PC 上已经有4 个“ gds32.dll ”库,大小不一,见图。
是的,在这台 PC 上,我安装或卸载了FB。(而且我在system32中只有FB的“ gds32.dll ” )
在另一台只有FB和一个“ gds32.dll ”的PC上(我删除了所有额外的“ gds32.dll ”,曾经还有InterBase),没有这样的问题。我现在在Delphi10.2中需要什么来拆除“ Client InterBase ”?
是的,我还为 Delphi7 更新了“IBXDP705.EXE”和“IBXDP708.EXE”——但那是很久以前的事了。
您描述的情况称为DLL Hell。为避免这种情况,切勿将文件复制到 System32。
下载时使用dll的完整路径,或者将正确版本的dll放在exe文件所在的文件夹中。
1) 删除所有gds32.dll,将正确的从Firebird复制到System32。如果您不使用 Delphi xe10 上的程序与 Interbase(即 Interbase)的连接,那么它将起作用。
2)如果Delphi 7通过FIBPlus连接,则写入工程文件
...并将 Firebird 的 gds32.dll 重命名为 mycollfbclient.dll。将其放入程序目录中就足够了,或者您可以使用 System32。诚然,在不同版本的 FIBPlus 中,这可以是一个常数,也可以是一个变量。
3) 如果您在 Delphi 7 中使用 IBX,则查看 IBASE_DLL 的 IBHeader.pas 文件。在我的 Delphi 6 中,它是一个常数。因此,要么将其修复为 var,要么直接将其名称更改为 IBHeader.pas 并尽可能重新编译。
报告
你有什么版本的火鸟
你有 Delphi 7 的源代码吗?
您在其中使用了哪些访问组件
最可靠的 DLL 地狱解决方案(参见 Anton Shchyrov 的帖子)是使用清单将 Firebird 绑定到您的应用程序。尽管 DLL 加载顺序已记录在案,但将 dll 放入您的目录并不总能产生预期的效果。
简而言之,Firebird 程序集必须位于一个单独的目录中(在应用程序 exe 文件旁边),并且其中还包含一个带有其描述的文件(文件名相当于目录名,带有 .manifest 扩展名):
接下来,应用程序准备自己的清单文件,其中包含程序集的指示(您可以将其存储在任何地方 - 该文件将作为资源包含在 exe 文件中):
应用程序清单文件必须在项目设置的“应用程序 -> 清单”部分中指定。现在,当应用程序尝试加载 gds23.dll 库时,它总是从本地程序集中获取。如果 exe 文件旁边没有程序集,则应用程序将无法启动。