为什么CString(LPCTSTR lpsz)构造函数检查lpsz的高两个字节

Why the CString(LPCTSTR lpsz) constructor check the high two bytes of lpsz?

本文关键字:lpsz 检查 高两个 字节 构造函数 CString LPCTSTR 为什么      更新时间:2023-10-16

我正在阅读MFCCString的源代码。我对构造函数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) failedn", nID);
    }
    else
    {
        int nLen = SafeStrlen(lpsz);
        if (nLen != 0)
        {
            AllocBuffer(nLen);
            memcpy(m_pchData, lpsz, nLen*sizeof(TCHAR));
        }
    }
}

它检查它是否从MAKEINTRESOURCE传递了实际指针或整数资源标识符。在后一种情况下,它从资源加载字符串。

这是为了加载字符串资源。 请参阅LoadString()通话。