Han*_*ant 55

那是Charles Simonyi,微软应用软件部门的前负责人,开发Word和Excel的团队.他是设置标识符命名标准的人.由于没有人知道如何发音他的姓氏,他们选择了他出生的国家并称之为匈牙利表示法.Windows小组也采用了它,但选择了"糟糕"的类型,匈牙利系统.选择标识符的第一个字母以记录变量的类型.与"好"类型相反,Apps Hungarian,它按逻辑类型名称而不是物理类型名称选择前缀.西蒙尼的版本.
所以它是L,就像Long,W和Word一样.LPCWSTR就是这样的,它是指向常量宽字符串的长指针.系统匈牙利语的一个明显问题是,当架构发生变化时,它不再运行得那么好.最初选择16位操作系统(L = 32位,W = 16位),在不更改名称(W = 32位)的情况下迁移到32位,今天我们处于64位(L = W = 64位).
所以忽略这些前缀,它们只是一个历史性的意外.你真的必须为LRESULT类型选择IntPtr,它当然可以是64位版本的Windows上的64位值.当你不这样做时很难诊断问题,这是一个常见的问题.
关于主题,你在照片背景中看到的模糊图像也是一个关于西蒙尼的有趣信息.微软与员工分享了巨大的成功,并将其中许多人变成了百万富翁.您在后台看到的是停靠在国际空间站的航天飞机的镜头.西蒙尼是七位"太空游客"之一,并为自己买了一张去国际空间站的机票.唯一一次这样做两次,让他回到6000万美元:)
这些名字来自历史原因。在 WINdows 的时代,16 位 WPARAM 意味着匈牙利符号中的字参数和 LPARAM 长参数。移动到 32 位会折叠到相同的大小(32 位整数),但名称保持不变。LRESULT 意味着长结果,并且由于历史原因再次保留名称。当 windows64 位出现时,另一个变化发生了。请在 MSDN 中查看此处以获得完整列表。详细说明:LPARAM和LRESULT都是LONG_PTR 的类型定义,其中 LONG_PTR 是:
#if defined(_WIN64)
typedef __int64 LONG_PTR;
#else
typedef long LONG_PTR;
#endif
Run Code Online (Sandbox Code Playgroud)
WPARAM是UINT_PTR的 typedef ,其中UINT_PTR是:
#if defined(_WIN64)
typedef unsigned __int64 UINT_PTR;
#else
typedef unsigned int UINT_PTR;
#endif
Run Code Online (Sandbox Code Playgroud)
您基本上可以看到最终指向相同大小位的类型:唯一真正的区别是您使用的是 Windows 32 还是 64。就使用意义而言,它们是您可以根据窗口过程需要使用的一般浇注参数做。通常,由于几个数字是不够的,因此会使用复杂的数据结构并将它们的值作为 WPARAM 或 LPARAM 传递,因此除非您关注上下文,否则您无法分配任何特定含义。