Windows数据类型

来源:互联网 发布:新建家庭网络 编辑:程序博客网 时间:2024/05/22 00:08

   由微软Windows操作系统所支持的各种数据类型是用来定义函数的返回值、函数和消息的参数以及结构体成员(因为Win32程序是用C语言来编写,所以没有“类”这个概念)的。这些数据类型定义了上述元素的尺码(在内存中的,也就是占用内存的字节数)和含义。笔者以前一直不太注意这些东西,结果在程序设计时可谓步履维艰。不同类型的常/变量,在程序用扮演的角色相去甚远,了解这些类型,对剖析程序的工作原理是非常有用的。今天又是周末,我把这些类型列出来,然后把它们的“原形”也找出来——是不是很像“照妖镜”呀。

       下面这张表里包括这些类型:字符类型(character),整数类型(integer),逻辑值类型(布尔型,海峡那边的兄弟们喜欢叫“布林型”,Boolean),指针类型(pointer),句柄型(handle)。其中,字符类型、整数类型和逻辑值(布尔)类型是C语言编译器通用的,也就是与标准C语言一样。大多数指针类型都是以P(Pointer)或者LP(Long Pointer)前缀开头。“句柄”是指被装载进内存的一个资源(本质而言就是指一定范围内的唯一编号)。
  下面这张表是我结合MSDN里的资料制作的,因为自己也是初学,做的还比较粗糙,请大家多多指正:)

Windows数据类型本质类型字节数定义过程(来历)含义ATOMunsigned short2unsigned short→WORD→ATOM在Atom表中,一键(16位整数)一值(一个String)为一个Atom。BOOLint*int→BOOL逻辑变量,布尔值 (取值为 TRUE 或 FALSE)BOOLEANunsigned char1unsigned char→BYTE→BOOLEAN逻辑变量,布尔值 (取值为 TRUE 或 FALSE)BYTEunsigned char1unsigned char→BYTE字节型,8位。CALLBACK__stdcall调用__stdcall→CALLBACK回调函数的调用约定CHARchar1char→CHAR8位Windows字符(ANSI)COLORREFunsigned long4unsigned long→DWORD→COLORREF红,绿,蓝(RGB)值CONSTconst关键字const→CONST常量CRITICAL_SECTIONRTL_CRITICAL_SECTION结构体?RTL_CRITICAL_SECTION(结构)→CRITICAL_SECTIONCritical-section对象DWORDunsigned long4unsigned long→DWORD32位无符号整数DWORD_PTRunsigned long4unsigned long→ULONG_PTR→DWORD_PTR(另有其它路径)略……(用处挺大,不过太长了)DWORD32unsigned int*unsigned int→DWORD3232位无符号整数DWORD64unsigned __int648unsigned __int64→DWORD6464位无符号整数FLOATfloat4float→FLOAT浮点数变量HACCELHACCEL__结构体指针 由DECLARE_HANDLE(name)宏定义的指向HACCEL__结构体的指针快捷键列表的句柄HANDLEvoid *(一个地址) void *→HANDLE对象的句柄HBITMAPHBITMAP__结构体指针 由DECLARE_HANDLE(name)宏定义的指向HBITMAP__结构体的指针位图的句柄HBRUSHHBRUSH__结构体指针 由DECLARE_HANDLE(name)宏定义……画刷的句柄HCONVHCONV__结构体指针 由DECLARE_HANDLE(name)宏定义……动态数据交换(DDE)会话的句柄HCONVLISTHCONVLIST__结构体指针 由DECLARE_HANDLE(name)宏定义……动态数据交换(DDE)会话列表的句柄HCURSORHICON__结构体指针 HICON__ *→HICON→HCURSOR光标的句柄HDCHDC__结构体指针 由DECLARE_HANDLE(name)宏定义……设备上下文(DC)的句柄HDDEDATAHDDEDATA__结构体指针 由DECLARE_HANDLE(name)宏定义……动态数据交换数据的句柄HDESKHDESK__结构体指针 由DECLARE_HANDLE(name)宏定义……桌面(Desktop)的句柄HDROPHDROP__结构体指针 由DECLARE_HANDLE(name)宏定义……Handle to an internal drop structure.HDWPvoid *(一个地址) void *→HANDLE→HDWPHandle to a deferred window position structure.HENHMETAFILEHENHMETAFILE__结构体指针 由DECLARE_HANDLE(name)宏定义……增强图元文件的句柄HFILEint*int→HFILE由OpenFile(而不是CreateFile)打开的文件的句柄.HFONTHFONT__结构体指针 由DECLARE_HANDLE(name)宏定义……字体的句柄HGDIOBJvoid near * void NEAR *→HGDIOBJGDI对象的句柄HGLOBALvoid *(一个地址) void *→HANDLE→HGLOBAL全局内存块的句柄HHOOKHHOOK__结构体指针 由DECLARE_HANDLE(name)宏定义……句子(hook)的句柄HICONHICON__结构体指针 由DECLARE_HANDLE(name)宏定义……图标的句柄HIMAGELIST_IMAGELIST结构体指针 _IMAGELIST *→HIMAGELIST图片列表的句柄HIMCHIMC__结构体指针 由DECLARE_HANDLE(name)宏定义……输入上下文的句柄HINSTANCEHINSTANCE__结构体指针 由DECLARE_HANDLE(name)宏定义……实例的句柄HKEYHKEY__结构体指针 由DECLARE_HANDLE(name)宏定义……(另有一条路径,一样)注册表键的句柄HKLHKL__结构体指针 由DECLARE_HANDLE(name)宏定义……输入点标识符HLOCALvoid *(一个地址) void *→HANDLE→HLOCAL本地内存块的句柄HMENUHMENU__结构体指针 由DECLARE_HANDLE(name)宏定义……菜单的句柄HMETAFILEHMETAFILE__结构体指针 由DECLARE_HANDLE(name)宏定义……图元文件的句柄HMODULEHINSTANCE__结构体指针 HINSTANCE__*→HINSTANCE→HMODULE模块的句柄。值由模块的位置来决定。HMONITORHMONITOR__结构体指针 由DECLARE_HANDLE(name)宏定义……显示器的句柄HPALETTEHPALETTE__结构体指针 由DECLARE_HANDLE(name)宏定义……调色板的句柄HPENHPEN__结构体指针 由DECLARE_HANDLE(name)宏定义……画(线)笔的句柄HRGNHRGN__结构体指针 由DECLARE_HANDLE(name)宏定义……区域的句柄HRSRCHRSRC__结构体指针 由DECLARE_HANDLE(name)宏定义……资源的句柄HSZHSZ__结构体指针 由DECLARE_HANDLE(name)宏定义……动态数据交换(DDE)字符串的句柄HWINSTAHWINSTA__结构体指针 由DECLARE_HANDLE(name)宏定义……窗口状态的句柄HWNDHWND__结构体指针 由DECLARE_HANDLE(name)宏定义……窗口的句柄

  INTint*int→INT32位有符号整数INT_PTRint(_W64 int即__w64 int)*_W64 int→INT_PTR,_W64就是__w64,是为了解决32位与64位编译器的兼容性而设置的关键字用于指针运算INT32signed int*signed int→INT3232位有符号整数INT64signed __int648signed __int64→INT6464位有符号整数LANGIDunsigned short2unsigned short→WORD→LANGID语言标识符LCIDunsigned long4unsigned long→DWORD→LCIDLocale identifier.LCTYPEunsigned long4unsigned long→DWORD→LCTYPELocale information type. LONGlong4long→LONG32位有符号整数LONG_PTRlong4_W64 long→LONG_PTR用于指针运算LONG32signed int*signed int→LONG3232位有符号整数LONG64__int648__int64→LONG6464位有符号整数LONGLONG__int648__int64→LONGLONG64位有符号整数LPARAMlong4_W64 long→LONG_PTR→LPARAM消息的参数LPBOOLint * int→BOOL, BOOL far *→LPBOOLBOOL类型的指针LPBYTEunsigned char * unsigned char→BYTE,BYTE far *→LPBYTEBYTE类型的指针LPCOLORREFunsigned long * unsigned long→WORD,DWORD *→LPCOLORREF颜色值的指针LPCRITICAL_SECTIONRTL_CRITICAL_SECTION结构体指针 RTL_CRITICAL_SECTION *PRTL_CRITICAL_SECTION→,PRTL_CRITICAL_SECTION→LPCRITICAL_SECTIONCRITICAL_SECTION的指针LPCSTR静态char * char→CHAR,CONST CHAR *→LPCSTR静态8位Windows字符(ANSI)无终结字符串指针LPCTSTR静态wchar_t * wchar_t→WCHAR,CONST WCHAR *→LPCWSTR,LPCWSTR→LPCTSTR如果UNICODE已定义则为LPCWSTR,否则为LPCTSTRLPCVOID静态void * CONST void far *→LPCVOID任何类型的静态指针LPCWSTR静态wchar_t * wchar_t→WCHAR,CONST WCHAR *→LPCWSTR静态16位Windows字符(Unicode)无终结字符串指针LPDWORDunsigned long * unsigned long→DWORD,DWORD far *→LPDWORDDWORD的指针LPHANDLE指向句柄的指针 void *→HANDLE,HANDLE FAR *→LPHANDLEHANDLE的指针LPINTint * int far *→LPINTINT的指针LPLONGlong * long far *→LPLONGLONG的指针LPSTRchar * char→CHAR,CHAR *→LPSTR8位Windows字符(ANSI)无终结字符串指针LPTSTRwchar_t * wchar_t WCHAR,WCHAR *→LPWSTR,LPWSTR→LPTSTRAn LPWSTR if UNICODE is defined, an LPSTR otherwise.LPVOIDvoid * void far *→LPVOID任何类型的指针LPWORDunsigned short * unsigned short→WORD,WORD far *→LPWORDWORD的指针LPWSTRwchar_t * wchar_t→WCHAR,WCHAR *→LPWSTR16位Windows字符(ANSI)无终结字符串指针LRESULTlong4_W64 long→LONG_PTR→LRESULT有符号的消息处理结果LUIDLUID结构  局部唯一标识符PBOOLint * int→BOOL,BOOL near *→PBOOLBOOL的指针PBOOLEANunsigned char * unsigned char→BYTE→BOOLEAN,BOOLEAN *→PBOOLEANBOOL的指针PBYTEunsigned char * unsigned char→BYTE,BYTE near *→PBYTEBYTE的指针PCHARchar * char→CHAR,CHAR *→PCHARCHAR的指针PCRITICAL_SECTIONRTL_CRITICAL_SECTION结构体指针 RTL_CRITICAL_SECTION *→PRTL_CRITICAL_SECTION,PRTL_CRITICAL_SECTION→PCRITICAL_SECTIONCRITICAL_SECTION的指针PCSTR静态char * char→CHAR,CONST CHAR *→PCSTR静态8位Windows字符(ANSI)无终结字符串指针PCTSTR静态wchar_t * wchar_t→WCHAR,CONST WCHAR *→LPCWSTR,LPCWSTR→PCTSTR如果UNICODE已定义则为PCWSTR,否则为PCSTRPCWCH静态wchar_t * wchar_t→WCHAR,CONST WCHAR *→PCWCHWCHAR的静态指针PCWSTR静态wchar_t * wchar_t→WCHAR,CONST WCHAR *→PCWSTR静态16位Windows字符(Unicode)无终结字符串指针PDWORDunsigned long * unsigned long→DWORD,DWORD near *→PDWORDDWORD的指针PFLOATfloat * float→FLOAT,FLOAT *→PFLOATFLOAT的指针PHANDLE指向句柄的指针 void *→HANDLE,HANDLE *→PHANDLEHANDLE的指针PHKEY指向HKEY的指针 HKEY__ *→HKEY *→PHKEYHKEY的指针PINTint * int near *→PINTINT的指针PLCIDunsigned long * unsigned long→DWORD,DWORD near *→PDWORD→PLCIDLCID的指针PLONGlong * long→LONG,LONG *→PLONGLONG的指针PLUIDLUID结构体指针 LUID *→PLUIDLUID的指针
POINTER_32void * void *→POINTER_3232位指针(详解略)POINTER_64void * void *→POINTER_6464位指针(详解略)PSHORTshort * short→SHORT,SHORT *→PSHORTSHORT的指针PSTRchar * char→CHAR,CHAR *→PSTR8位Windows字符(ANSI)无终结字符串指针PTBYTEwchar_t * wchar_t→WCHAR,WCHAR *→PTBYTETBYTE的指针PTCHARwchar_t * wchar_t→WCHAR,WCHAR *→PTCHARTCHAR的指针PTSTRwchar_t * wchar_t→WCHAR,WCHAR *→LPWSTR→PTSTRPWSTR if UNICODE is defined, a PSTR otherwise.PTBYTEwchar_t * wchar_t→WCHAR,WCHAR *→PTBYTETBYTE的指针PTCHARwchar_t * wchar_t→WCHAR,WCHAR *→PTCHARTCHAR的指针PTSTRwchar_t * wchar_t→WCHAR,WCHAR *→LPWSTR→PTSTRA PWSTR if UNICODE is defined, a PSTR otherwise.PUCHARunsigned char * unsigned char→UCHAR,UCHAR *→PUCHARUCHAR的指针PUINTunsigned int * unsigned int *→PUINT(呵呵,为什么不用UINT*来定义呢?)UINT的指针PULONGunsigned long * unsigned long→ULONG,ULONG *→PULONGULONG的指针PUSHORTunsigned short * unsigned short→USHORT,USHORT *→PUSHORTUSHORT的指针PVOIDvoid * void *→PVOID任何类型的指针PWCHARwchar_t * wchar_t→WCHAR,WCHAR *→PWCHARWCHAR的指针PWORDunsigned short * unsigned short→WORD,WORD near *→PWORDWORD的指针PWSTRwchar_t * wchar_t→WCHAR,WCHAR *→PWSTR16位Windows字符(Unicode)无终结字符串指针REGSAMunsigned long unsigned long→DWORD→ACCESS_MASK→REGSAM注册表值的安全访问掩码SC_HANDLESC_HANDLE__结构体指针 由DECLARE_HANDLE(name)宏定义……Handle to a service control manager database.SC_LOCKvoid * void far *→LPVOID→SC_LOCKHandle to a service control manager database lock. SERVICE_STATUS_HANDLESERVICE_STATUS_HANDLE__结构体指针 由DECLARE_HANDLE(name)宏定义……Handle to a service status value. SHORTshort2short→SHORT短整数类型(16位)SIZE_Tunsigned long4unsigned long→ULONG_PTR→SIZE_T指针可指向的最大字节数SSIZE_Tlong _W64 long→LONG_PTR→SSIZE_T有符号SIZE_T.TBYTEwchar_t2wchar_t→WCHAR,WCHAR→TBYTE如果UNICODE已定义则为WCHAR,否则为CHARTCHARwchar_t2wchar_t→WCHAR,WCHAR→TCHAR如果UNICODE已定义则为WCHAR,否则为CHARUCHARunsigned char1unsigned char→UCHAR无符号CHARUINTunsigned int*unsigned int→UINT无符号INTUINT_PTRunsigned int*unsigned int→UINT_PTR无符号INT_PTR.UINT32unsigned int2unsigned int→UINT32无符号INT32.UINT64unsigned __int644unsigned __int64→UINT64无符号INT64.ULONGunsigned long4unsigned long→ULONG无符号LONG.ULONG_PTRunsigned long4unsigned long→ULONG_PTR无符号LONG_PTR.ULONG32unsigned int2unsigned int→ULONG32无符号LONG32ULONG64unsigned __int644unsigned __int64→ULONG64无符号LONG64ULONGLONGunsigned __int644unsigned __int64→ULONGLONG64位无符号整数UNSIGNED没查到,大家帮忙吧  无符号属性USHORTunsigned short unsigned short→USHORT无符号SHORT类型VOIDvoid void→VOID任何类型WCHARwchar_t2wchar_t→WCHAR16位Unicode字符WINAPI__stdcall调用__stdcall→WINAPI系统函数(API函数)调用约定WORDunsigned short2unsigned short→WORD16位无符号整数WPARAMunsigned int*unsigned int→UINT_PTR→WPARAM消息的参数

注:DECLARE_HANDLE宏的定义如下。

#ifdef STRICT
typedef void *HANDLE;
#define
DECLARE_HANDLE(name) struct name##__ { int unused; }; /
typedef struct name##__ *name

#else
typedef PVOID HANDLE;
#define DECLARE_HANDLE(name) typedef HANDLE name
#endif

  在列表中,是按前半部分的宏定义而写的,请大家注意。

最后这张表是Visual C++ 7.1编译器支持的数据类型,也就是Windows各种数据类型的“根源”了。

 

 

数据类型名称字节数别名取值范围int*signed,signed int由操作系统决定,即与操作系统的"字长"有关unsigned int*unsigned由操作系统决定,即与操作系统的"字长"有关__int81char,signed char–128 到 127__int162short,short int,signed short int–32,768 到 32,767__int324signed,signed int–2,147,483,648 到 2,147,483,647__int648–9,223,372,036,854,775,808 到 9,223,372,036,854,775,807bool1false 或 truechar1signed char–128 到 127unsigned char10 到 255short2short int,signed short int–32,768 到 32,767unsigned short2unsigned short int0 到 65,535long4long int,signed long int–2,147,483,648 到 2,147,483,647long long8none (but equivalent to __int64)–9,223,372,036,854,775,808 到 9,223,372,036,854,775,807unsigned long4unsigned long int0 到 4,294,967,295enum*由操作系统决定,即与操作系统的"字长"有关float43.4E +/- 38 (7 digits)double81.7E +/- 308 (15 digits)long double81.7E +/- 308 (15 digits)wchar_t2__wchar_t0 到 65,535

原创粉丝点击