谁能解释FindResource / LoadResource / LockResource?

时间:2012-09-03 08:50:26

标签: windows nested-resources

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

Microsoft指出应该使用三个步骤:

  1. 使用FindResource返回HRSRC
  2. 将LoadResource与该HRSRC一起使用并返回HGLOBAL
  3. 使用LockResource锁定HGLOBAL以返回最终想要的指针。
  4. 我不明白为什么MS设计这个过程如此奇怪?

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

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

    1. LoadLibrary加载的模块地址范围内的所有指针地址。
    2. 步骤2和步骤3的地址相同。
    3. 谁可以解释这些功能的确切作用?

1 个答案:

答案 0 :(得分:4)

这些功能可以追溯到内存不足的Windows 3.x天,并且资源保留在磁盘上直到需要它们为止。 FindResource在磁盘文件的资源表中找到它们,LoadResource将它们加载到内存中。内存被分配为“可移动”,这意味着内存管理器可以根据需要移动它以释放空间以生成更大的连续块。因此,在访问内存之前,需要使用LockResource锁定内存。

从Windows 2000 / XP开始,很多这些步骤都是多余的,但这些功能仍然是为了向后兼容。