当加载资源时,比如说加载图标资源:
LoadIcon (hInstance, MAKEINTRESOURCE (IDI_ICON)) ;
其中hInstance为程序实例句柄,IDI_ICON为图标ID,假如为1001,看到MAKEINTRESOURCE被定义为:
#define MAKEINTRESOURCEA(i) (LPSTR)((DWORD)((WORD)(i)))                 //(假设为ANSI)
那么就相当于(LPSTR)((DWORD)((WORD)(1001))),将高字置0,然后转换为LPSTR类型,也就是char* ,那么实际上就是(char*)1001,这种转换的值有什么意义?原理是什么?LoadIcon如何使用呢

解决方案 »

  1.   

    MAKEINTRESOURCE 的作用:   
    是把一个"数字形ID",转化为"字符串".但是执行前后,输入的数据的内容和长度是不变的!它只不过就是C语言里面"强制类型转换"而已. 
      

  2.   

    MAKEINTRESOURCE 强制转换成char*,因为LoadIcon的参数要求是char*型的,不强转编译报错
    另windows中有效指针地址是大于64K,所以很多接受char*型参的API都设计成可以用一个小于64K的值代表资源ID,而不是一个字符串
      

  3.   

    我更郁闷,IDR_RAR2未定义。注:我的资源是rar的