常常 看到对MAKEINTRESOURCE的疑问,认为怎么能把一个整数转化一个指向字符串的指针?下面是这个宏的定义。
#define MAKEINTRESOURCEA(i) ((LPSTR)((ULONG_PTR)((WORD)(i))))
#define MAKEINTRESOURCEW(i) ((LPWSTR)((ULONG_PTR)((WORD)(i))))
为什么能把一个一个ID号转化一个字符串指针,理论是不成立的,因为如果将其转化,将会是系统不允许的一内存空间。
实际上这个宏是配合CString 一起来用的。如果单独用这个宏来输出字符串,比如AfxMessageBox(MAKEINTRESOURCEA(ID))根本不会是你所想要的字符串输出。
无论是CString 的构造函数还是赋值运算符都会对这个输入的地址值做一个处理。
就是调用CheckImplicitLoad来判断是否是字符串指针还是资源ID.CheckImplicitLoad的源代码如下。
bool CheckImplicitLoad( __in_opt const void* pv )
{
bool bRet = false;