为什么没有定义PCTSTR但定义了LPCTSTR?

Nap*_*Nap 1 winapi tchar visual-c++

我已被分配更新用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的Windows API的遗物,但我找不到谷歌的任何东西.

有谁知道什么是PCTSTR.我猜测,因为这是来自旧的代码,这是以前的工作.任何想法如何编译?[我把它更改为LPCTSTR并编译,我想知道是否还有其他方法而不是更改定义名称]

Han*_*ant 9

LPCTSTR中的LP表示长指针.这是一款来自Windows 3天的神器,一个16位操作系统.当你只有一个16位的cpu寄存器时,16位代码有几种内存模型来处理尝试寻址超过65536字节的内存.短指针使用默认数据段寄存器值和16位偏移量.长指针是32位,16位用于加载段寄存器,16位用于偏移.

LPCTSTR中的T表示TCHAR,char或wchar_t的typedef,具体取决于UNICODE宏的存在.

这使得PCTSTR成为时代不合时宜的人类和恐龙电影风格.从来没有一个16位的Unicode版本的Windows,32位版本的Windows总是使用32位指针.这听起来只是一个错误.尽管如此,当前版本的winnt.h 确实有一个typedef,使其与LPCTSTR相同.并且只在一个地方使用,stralign.h头部带有一个名为TSTR_ALIGNED_STACK_COPY的奇怪函数.但只是在评论中.

错误.您的解决方法是正确的选择.