windows 默认编码,windows的编码格式

  windows 默认编码,windows的编码格式

  Windows编码约定

  从MSDN翻译英文原文

  如果你是一个编写windows程序的新手,当你第一次看到windows程序的源代码时,你会感到不安。这些代码充满了奇怪的定义,比如DWORD、LPRECT等等;以及变量的名字,比如“hWnd”和“pwsz”(匈牙利记法)。花点时间了解一些windows编程的编码约定是值得的。

  大多数WindowsAPI由函数或组件对象模型(COM)接口组成。很少有WindowsAPI提供C类(一个显著的例外是GDI中的2D图形API)。

  Windows头文件包含了大量的类型定义,大部分都是在WinDef.h中定义的,下面是一些经常遇到的类型定义。

  整数(整数)类型

  可以看到,这些数据类型定义有一定的冗余,这些重叠的部分是出于旧WindowsAPI的考虑。这里列出的类型都有固定的大小,这些类型的大小在32位和64位应用程序中都是相同的。例如:DWORD type,在32位或64位应用程序中总是32位宽。

  布尔型(Boolean)

  BOOL是一个整数值,用于布尔上下文中的类型定义。头文件WinDef.h还定义了两个用于Bool的值:

  #defineFALSE0

  #定义规则1

  虽然这个定义是正确的,但是大多数返回布尔值的函数可以返回任何非零值来表示一个真正的布尔值。因此,布尔型的应用程序应该这样写:

  //正确的写法

  bool result=somefunctionthattreturnsboolan();

  如果(结果)

  {

  .

  }

  而且不应该是这样的:

  //写错了

  If(结果==真)

  {

  .

  }

  请注意,bool是整数类型,不能与c语言的BOOL类型互换。

  指针类型(指针)

  Windows以指向X的指针的形式定义了许多数据类型,通常以p或LP为前缀。例如,LPRECT是指向RECT的指针,而RECT是描述矩形的结构。的下列变量声明是等效的:

  RECT *矩形;//指向RECT结构的指针

  LPRECTrect//同上

  PRECTrect//同上

  历史上P代表指针,LP代表长指针;长指针(也称为远指针)是16位窗口的延续,当它需要在当前段的内存地址范围之外时。保留这个LP前缀是为了使16位代码更容易连接到32位Windows。现在没区别了,指针就是指针。

  指针精度类型(指针精度)

  以下数据类型都是——的指针大小。具体来说,它对于32位应用程序是32位宽,对于64位应用程序是64位宽。编译时大小是一定的。当32位程序在64位窗口上运行时,这些数据类型仍然是4字节宽(64位程序不能在32位窗口上运行,因此不会发生相反的情况)。

  lDWORD_PTR

  lINT_PTR

  lLONG_PTR

  卢龙_PTR

  lUINT_PTR

  使用这些类型,整数可以转换为指针。它们还用于定义指针算法的变量,以及定义循环计数器以在所有方向上遍历内存缓冲区中的字节。更普遍的情况是,在64位Windows上,现有的32位值会扩展到64位。

  匈牙利代表

  匈牙利记数法是在变量名前加前缀,给变量添加信息(这种记数法的发明者查尔斯西蒙是匈牙利人,因此得名)。

  在最初的形式中,匈牙利符号给出了一个变量的语义信息来告诉你它的预期用途。比如I的语义是index,cb的语义是以字节为单位的大小(字节数),rw和col的语义是行数和列数。这些前缀的目的是避免在错误的上下文中意外使用变量。例如,如果你看到表达式rwPointer cbTable,你会知道一个行号被添加到一个大小,这几乎可以肯定是代码中的一个bug。

  更常见的匈牙利符号是使用前缀来给出类型信息。比如dw代表DWORD,W代表WORD。

  如果你在网上搜索匈牙利记谱法,会发现很多关于匈牙利记谱法好坏的观点。一些程序员非常不喜欢匈牙利符号,而另一些程序员认为它很有用。无论如何,许多人在MSDN上的代码示例使用匈牙利符号。但是你不需要记住前缀来理解代码。

windows 默认编码,windows的编码格式