gpt4 book ai didi

windows - 谁能解释一下FindResource/LoadResource/LockResource?

转载 作者:可可西里 更新时间:2023-11-01 10:00:28 24 4
gpt4 key购买 nike

我通过 LoadLibrary 加载一个模块(exe/dll)并在其中获取一个二进制资源的指针。

Microsoft 说明应该使用三个步骤:

  1. 使用 FindResource 返回 HRSRC
  2. 将 LoadResource 与 HRSRC 一起使用并返回 HGLOBAL
  3. 使用 LockResource 锁定 HGLOBAL 最终返回一个你想要的指针。

我不明白微软为什么把这个流程设计的这么奇葩?

如果要检测resource的长度,必须用第一步返回的指针使用SizeofResource,不能输入step2和step3返回的指针。

如果检查从这些步骤输出的指针地址,我得到了结果:

  1. LoadLibrary加载的模块地址范围内的所有指针地址。
  2. step2和step3的地址是一样的。

谁能解释一下这些函数到底做了什么?

最佳答案

这些功能可追溯到 Windows 3.x 时代,当时内存稀缺,资源一直保存在磁盘上,直到需要时才使用。 FindResource 在磁盘文件的资源表中找到它们,LoadResource 将它们加载到内存中。内存被分配为“可移动”,这意味着内存管理器可以根据需要移动它以释放空间来制作更大的连续 block 。因此,在访问内存之前需要使用 LockResource 对其进行锁定。

自 Windows 2000/XP 以来,许多这些步骤都是多余的,但为了向后兼容,功能仍然存在。

关于windows - 谁能解释一下FindResource/LoadResource/LockResource?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12244665/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com