我正在MFC中阅读CString
的源代码。我对构造函数CString::CString(LPCTSTR lpsz)
的实现方式很好奇。
以我的理解,在复制lpsz
指示的字符串之前,只需要检查lpsz
是否为NULL
即可,而无需结合检查HIWORD(lpsz)
是否为NULL
。
是否有任何MFC人员通过这里并愿意给出一些解释?
CString::CString(LPCTSTR lpsz)
{
Init();
if (lpsz != NULL && HIWORD(lpsz) == NULL)
{
UINT nID = LOWORD((DWORD)lpsz);
if (!LoadString(nID))
TRACE1("Warning: implicit LoadString(%u) failed\n", nID);
}
else
{
int nLen = SafeStrlen(lpsz);
if (nLen != 0)
{
AllocBuffer(nLen);
memcpy(m_pchData, lpsz, nLen*sizeof(TCHAR));
}
}
}
最佳答案
它检查是否从 MAKEINTRESOURCE
传递了实际的指针或整数资源标识符。在后一种情况下,它将从资源中加载字符串。