我被指派更新用 MSVC++ 6 编写的旧代码。我得到了 PCTSTR 的未知定义,但即使我包含了 tchar.h,它也没有定义。根据我以前的经验,我知道有 LPTSTR 但没有 PCTSTR。
我 grep C:\Program Files\Microsoft Visual Studio\VC98\Include\ 文件夹,但没有找到 PCTSTR 的定义。但令我惊讶的是,当我搜索 Windows SDK 文件夹 [C:\Program Files\Microsoft SDK] 时,没有 PCTSTR 的定义,但它在其中一个示例中使用了。 [C:\Program Files\Microsoft SDK\Samples\winui\Resource\Iconpro*]。所以我猜测这可能只是 16 位 Windows API 的遗留物,但我无法从 google 找到任何东西。
有谁知道PCTSTR 是做什么用的?我猜因为这是来自以前有效的旧代码。有什么想法如何编译? [我将其更改为 LPCTSTR 并编译了,我想知道除了更改定义名称之外是否还有其他方法]
LPCTSTR中的LP表示长指针。它是 Windows 3 天后的一个 16 位操作系统的产物。当您只有 16 位 CPU 寄存器时,16 位代码有多种内存模型来处理尝试寻址超过 65536 字节的内存。短指针使用默认数据段寄存器值和 16 位偏移量。长指针是 32 位,16 位用于加载段寄存器,16 位用于偏移量。
LPCTSTR 中的 T 表示 TCHAR,是 char 或 wchar_t 的类型定义,具体取决于 UNICODE 宏的存在。
这使得 PCTSTR 成为一种不合时宜的人类和恐龙电影风格。 Windows 从来没有 16 位 Unicode 版本,32 位版本的 Windows 始终使用 32 位指针。这听起来像是一个错误。不过,当前版本的 winnt.hdoes有一个 typedef,使其与 LPCTSTR 相同。并且仅用于onestralign.h 头文件中有一个名为 TSTR_ALIGNED_STACK_COPY 的奇怪函数。但仅在评论中。
错误。您的解决方法是正确的选择。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)