我正在检查旧软件的旧补丁: http://cc.embarcadero.com/item/21475
补丁的完整描述如下:
针对BDE的补丁“磁盘空间不足”问题。 (4Gb倍数术语: 无特殊条款名称:Reinaldo Yanez电子邮件:ryaayr@yahoo.com网址: 无摘要:修补程序BDE'磁盘空间不足' - 错误可以 当磁盘可用空间接近多个时,在使用BDE时发生 4Gb。说明:此单元是着名的4Gb BDE Bug的补丁。 它是用于修复可能发生的“磁盘空间不足”的错误 当磁盘可用空间接近4Gb的倍数时使用BDE。 有关详细信息,请参阅质量中心的BDE报告#7089。
BDE中出错的原因显然是idapi32.dll中的一个错误 同时计算可用磁盘空间。 Idapi32.dll正在使用api功能 称为由kernel32.dll导出的GetDiskFreeSpaceA。
解决方法是在kernel32.dll中“修补”GetDiskFreeSpaceA 当前进程,每次调用此函数都会重定向到新的 例程(NewGetDiskFreeSpaceA)。
包含补丁的源代码。如果你使用另一个 编程语言(即不是Delphi),一种预编译的DLL (FIX4GBug.dll)也包括在内。 (如果你可以编译包含的 单位,那么你不需要分发DLL)
产品:Delphi(4-7)修正比赛:无上传:25-Feb-04 10:03:08 上次更新时间为22-Mar-04 6:44:49 PM
我想知道:如果MyApplication.exe或BDE idapi32.dll正在调用kernel32.dll函数GetDiskFreeSpaceA,那么只需将FIX4GBug.dll放在旁边,就可以将调用重定向到kernerl32.dll / GetDiskFreeSpaceA到FIX4GBug.dll / GetDiskFreeSpaceA MyApplication.exe或idapi32.dll旁边?
即。 dll的简单放置,包含相同的功能(相同的名称和相同的签名),除了应用程序推送此应用程序使用本地DLL中的函数而不是位于Windows系统目录中的kernel32.dll?
答案 0 :(得分:1)
除了应用程序之外,包含相同功能(相同名称和相同签名)的dll的简单放置是否会推动此应用程序使用本地dll中的函数而不是位于Windows系统目录中的kernel32.dll?
不,这还不够。您的可执行文件没有理由加载该DLL。
您需要在流程中挂钩GetDiskFreeSpaceA
API函数。提供的源代码将执行此操作。或者,如果您通过调用LoadLibrary
将其加载到进程中,我怀疑提供的DLL也会这样做。