win32 资源中的图标名称?

Icon name in win32 resources?

我正在编写一个 Win32 应用程序 (extract.exe) 来列出或提取模块资源(EXE 或 DLL)中的图标或其他资源。该应用程序是用 C 编写的。它在 'FindResource()' 失败,我相信是因为名称不正确。目标应用程序 (app.exe) 在其 RC 脚本 (app.rc) 中包含以下内容:

MYICON                 ICON    DISCARDABLE     "app.ico"
MYRCDATA               RCDATA  DISCARDABLE     "hello.txt"

我用各种第三方工具和我自己的应用检查了 app.exe 的资源:图标的资源名称显示为 "1"而不是 "MYICON",但 RCDATA 的名称正确显示为 "MYRCDATA".

我已经确认“app.ico”是一个有效的 .ico 文件,但仍然不满意。

我在这里错过了什么?

注意:我 运行 win10/64 在 Dell 机器上使用 MS Visual C 进行编译。

我终于明白了。显然,资源编译器将图标文件分成两部分:(1) “图标目录”(又名“RT_GROUP_ICON”)和 (2) 图标本身。该目录包含一个 6 字节的 header 和一个或多个 16 字节的条目,其中包括实际图标的整数“ID”(在我的例子中为 1)。目录条目的格式为:

typedef struct    // This is the Directory Entry stored in resources
{
   BYTE Width;
   BYTE Height;
   BYTE Colors;
   BYTE Reserved;
   WORD Planes;
   WORD BitsPerPixel;
   DWORD ImageSize;
   WORD ResourceID
} IconDirResEntry, *PIconDirResEntry;

对此的一个很好的描述可以在 https://www.codeguru.com/cpp/w-p/win32/tutorials/article.php/c12873/Hacking-Icon-Resources.htm

在我的例子中,资源“MYICON”是 RT_GROUP_ICON 图标目录,其中包含 ID 值“1”。