windows 资源ID/资源名

比如我想加载一个ICON
使用函数:LoadIcon(HINSTANCE hInstance,LPCTSTR lpIconName);

【1】若我的X.RC文件是这样的: ICONX ICON “D:\1.ico”
在主函数里加载ico,可以这样:LoadIcon(hIns,"ICONX");

【2】若我的X.RC文件是这样的:123 ICON “D:\1.ico”
在主函数里加载ico,可以这样:LoadIcon(hIns,MAKEINTRESOURCE(123));

而MAKEINTRESOURCE就是把123的低16位值(123),作为一个地址指针,这个
地址里面存放着要加载的ICON名字...


如果是使用【2】的方法:

问题1,【2】的RC文件里,我只给ICON一个ID值,没给它起名字,LoadIcon
时的第二个参数是怎么获得的呢?

问题2,是不是意味着,在此进程的地址空间里,地址为123的地方存着ICON
的名字?换句话说,RC文件每个资源前面的ID,是不是人为的指定某个资源
,让它存储在所属进程地址空间里固定的位置(地址为资源ID值)?

问题3,进程(32bit)地址空间的 0X0000,0000~0X0000,FFFF 是专门放资源
的么?每个地址有多大的地方(每个地址有多少字字节)?

资源ID/资源名和windows没关系,是vc++的resource.h里面定义的常量和对应的名字。

 Syntax

HICON LoadIcon(          HINSTANCE hInstance,
    LPCTSTR lpIconName
);
Parameters

hInstance
[in] Handle to an instance of the module whose executable file contains the icon to be loaded. This parameter must be NULL when a standard icon is being loaded. 
lpIconName
[in] 
Pointer to a null-terminated string that contains the name of the icon resource to be loaded. Alternatively, this parameter can contain the resource identifier in the low-order word and zero in the high-order word. Use the MAKEINTRESOURCE macro to create this value.

To use one of the predefined icons, set the hInstance parameter to NULL and the lpIconName parameter to one of the following values.

IDI_APPLICATION
Default application icon.
IDI_ASTERISK
Same as IDI_INFORMATION.
IDI_ERROR
Hand-shaped icon.
IDI_EXCLAMATION
Same as IDI_WARNING.
IDI_HAND
Same as IDI_ERROR. 
IDI_INFORMATION
Asterisk icon.
IDI_QUESTION
Question mark icon.
IDI_WARNING
Exclamation point icon.
IDI_WINLOGO
Windows logo icon. Windows XP: Default application icon.
IDI_SHIELD
Security Shield icon. 
Return Value

@caozhy ,你好

在程序运行时,请问这些常量(资源)是存储在什么位置啊?(怎么存储的)

比如资源的名字,是存储在哪个地址的,每个进程都有自己独立的地址空间,属于某进程的资源名字是放在哪个地址里的?

之所以有这个问题,是因为MAKEINTRESOURCE宏是吧一个数值作为字符串首地址使用。
所以我想,是不是RC文件里面定义的资源ID,就是人为指定了资源名字符串的存储地址呢(相对于所属进程空间的地址)?