LoadResource()返回hGlobal我无法查询?

时间:2014-12-21 07:27:47

标签: winapi

以下代码块导致err1 = 0(成功)和err2 = 6(无效句柄)。

    HGLOBAL hGlobal = LoadResource(hInst, hrSrc);
    INT err1 = GetLastError();
    UINT gflags = GlobalFlags(hGlobal);
    INT err2 = GetLastError();

gflags的值为0x8000,表示GMEM_INVALID_HANDLE。我知道资源存在,如果我锁定内存,我会在资源中获取数据。

我的问题是为什么我的句柄结果无效? LoadResource()返回的内存是否是特殊的' HGLOBAL真的不是它的样子吗?

1 个答案:

答案 0 :(得分:4)

LoadResource返回的值实际上不是HGLOBAL

来自LoadResource文档:

  

LoadResource的返回类型是HGLOBAL,用于向后兼容,而不是因为该函数返回全局内存块的句柄。不要将此句柄传递给GlobalLock或GlobalFree函数。要获取指向资源数据第一个字节的指针,请调用LockResource函数;要获取资源的大小,请调用SizeofResource。

您使用LoadResource返回的值所做的就是将其传递给LockResourceSizeofResource

出于向后兼容的原因,这些功能就是这种方式。旧版本的Windows确实返回了真正的全局内存块。