代码之家  ›  专栏  ›  技术社区  ›  Zachary Turner

MAKEINTRESOURCE((id>>4)+1)的含义是什么?

  •  0
  • Zachary Turner  · 技术社区  · 6 年前

    我试图模仿 CString::LoadString(HINSTANCE hInst, DWORD id, WORD langID) 没有在我的应用程序中引入对MFC的依赖。所以我浏览了来源。它做的第一件事就是立即打电话 AtlGetStringResourceImage(hInst, id, langID) ,然后这又包含以下代码行:

        hResource = ::FindResourceExW(hInst, (LPWSTR)RT_STRING, MAKEINTRESOURCEW((id>>4)+1), langID);
    

    (这不是逐字逐句的,但我删掉了一些不重要的东西)。

    将ID移4加1是什么意思?根据FindResourceEx的文档,你应该通过 MAKEINTRESOURCE(id) ,我找不到任何在将id传递给 MAKEINTRESOURCE .同时,如果我打电话 MAKEINTRESOURCE(id) 然后它就不起作用了 FindResourceEx 返回null,而如果我使用上面的shift+add,那么它确实有效。

    有人能解释一下吗?

    0 回复  |  直到 6 年前
        1
  •  1
  •   Remy Lebeau    6 年前

    从 STRINGTABLE resource 文档:

    RC为每个节分配16个字符串,并使用标识符值确定哪个节将包含该字符串。标识符仅在底部4位不同的字符串放在同一节中。

    您感兴趣的代码通过忽略低4位来定位给定字符串标识符存储的部分。