为什么CString(LPCTSTR lpsz)构造函数检查lpsz的高两个字节
Why the CString(LPCTSTR lpsz) constructor check the high two bytes of lpsz?
我正在阅读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) failedn", nID);
}
else
{
int nLen = SafeStrlen(lpsz);
if (nLen != 0)
{
AllocBuffer(nLen);
memcpy(m_pchData, lpsz, nLen*sizeof(TCHAR));
}
}
}
它检查它是否从MAKEINTRESOURCE
传递了实际指针或整数资源标识符。在后一种情况下,它从资源加载字符串。
这是为了加载字符串资源。 请参阅LoadString()
通话。
相关文章:
- valgrind-hellgrind与泄漏检查的结果不同
- C++模板来检查友元函数的存在
- 检查输入是否不是整数或数字
- 试图让变量检查数组中的某些内容
- 检查值是否在集合p1和p2中,但不在p3中
- C++概念:如何使用'concept'检查模板化结构的属性?
- 概念TS检查忽略私有访问修饰符
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- 如何在C++中检查2D数组中负值的输入验证
- C++:正在检查LinkedList中的回文-递归方法-错误
- 使用for循环检查数组中的重复项
- 如何检查一个c++字符串中有多少相同的字符/数字
- 检查不带转换的扫描格式
- 如何检查线程是否锁定
- 清除前检查矢量
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- C++LDAP检查用户是否是特定组的成员
- 检查TCHAR数组输入是否为带符号整数C++
- 为什么CString(LPCTSTR lpsz)构造函数检查lpsz的高两个字节