Windows SDK的数据类型定义和宏定义

来源:互联网 发布:探地雷达测的数据图 编辑:程序博客网 时间:2024/06/07 07:07

Windows SDK的数据类型定义和宏定义

 

对于一个新人来说,第一次接触SDK编程或者说API编程,什么最迷惑你们的,我们讲它,我觉得Windows SDK中那'烦人'的数据类型定义和宏定义应该算这个很角色吧。。

其实微软的本意也是善良的,为了减轻程序员的负担,和为了编程的方便,才花了那么多心思与精力定义出了这么一大套数据类型与宏定义,这也是我为什么在之前说它烦人都是加上引号的原因,因为他不是真的烦人,熟练了,你不但不觉得它烦,反而离不开它了,呵呵,日久深情也就是这么来的。呵呵先看几个数据类型定义吧

typedef float FLOAT;

typedef long LONG;

typedef short SHORT 

typedef int INT;

typedef char CHAR;

float, long, short, int, char 这几个数据类型都是大家熟悉的C/C++的数据类型吧,微软将他们重新定义了一下,很简单,就是改变名字为大写了,这样做的目的大概是微软为了编码的方便吧,输入法大小写都不用切换了,多人性化呀呵呵。再看几个数据类型定义的例子

typedef unsigned int UINT;

typedef unsigned int UINT32;

typedef signed int INT32;

typedef unsigned long DWORD;

typedef unsigned short WORD;

这些数据类型的定义就稍微有实质性作用一些了,注意观察,他们都比较短了,不用写那么长了,而且也还比较直观,如果我要定义一个无符号整形,我就不用写unsigned int a;这么长了,只需UINT a; 多简单,多明了,所以我说其实不烦人吧。其中DWORD 算是SDK程序中可以经常看见的一个数据类型了,经常被使用,很多新手也就不明白,这是什么数据类型啊,现在看到了吧,其实就是无符号长整形unsigned long,给他取了个外号而已··没什么技术含量,所以不用怕,程序中究竟是写unsigned long 还是DWORD都看你自己心情,因为他们都代表同一种数据类型。

 

下面再介绍2个很重要的,经常被使用到的,无处不在的数据类型WPARAM,LPARAM.

先看看他们定义吧

typedef LONG_PTR LPARAM;

typedef UINT_PTR WPARAM;

先告诉你,这2个数据类型很重要,不是危言耸听,以后你写SDK程序就知道了,看他们的定义如上,有些迷糊别,我们一步一步分析,我们分析LPARAM。首先定义LPARAM LONG_PTR也就是用LPARAM的地方也就可以写成LONG_PTRLONG_PTR又是被定义成什么的呢?  

typedef long LONG_PTR;

看到了吗?也就是long所以归根结底,LPARAM 就是long型,所有LPARAM型的变量,你都可以直接使用long数据类型代替。不过不推荐这样,至于为什么,各位思考思考呢~~

以上这些数据类型是参考MSDN中的说明,或者可以查看WinDef.h这个头文件查看这些Windows数据类型的定义,那么也请各位自己推推看LARAMWPARAM的真面目吧~

各位朋友在推导的过程中可能发现LONG_PTR的定义是这样写的.

#if  defined (_WIN64)

typedef  __int64  LONG_PTR; 

#else

typedef  long  LONG_PTR;

#endif

这是什么意思呢,能看懂英文都能知道这在定义些什么,如果定义了_WIN64这个宏那么就定义LONG_PTR __int64,否则定义LONG_PTRlong很简单吧也就是说如果_WIN64这个宏在前面被定义了,那么这里的LONG_PTR就被定义为__int64这个在64位编程下的数据类型,否则就定义为long型,这样说应该比较好理解了吧。在这里,各位就不必深究__int64了,在目前的主流32位编程下很少使用它啦。理解就ok了。这样定义是微软为了程序员编写的程序能在32位与64位下都能编译而采用的伎俩。

有关这些Windows的数据类型,想查看他们的真面目,其实很简单,在VC6.0,VS2008 这些集成开发环境里面,你只需要在一个数据类型上面点击右键,在弹出菜单中选择‘Goto Defination或者是‘查看定义’就可以看到了,如果看到的还不是最终面目,在继续上面步骤直到看到它的本质数据类型为止。通过这样,新手对于Windows的这些复杂的数据类型定义也就有了根本的认识,不再是迷迷糊糊,在以后的编程中也就不会出现不知道用哪种数据类型或者哪些数据类型之间可以相互转换的情况了。不过还需要多多观察与练习才是啊~~

 

下面再来看一看windows中定义的一些宏

#define   VOID   void

#define  CONST   const

2个最简单的宏,也是只变成大写而已,难道又是为了方便程序员不切换输入法?还真的人性化呀。Windows SDK中的宏定义是最庞大的,最复杂的,但也是最灵活的,为什么这样说,先不告诉你,我会在以后的系列文章中一点一点的讲解,累积,因为太多了,也比较复杂,我们就采取在需要用到的时候才讲解它,目前看来还没这个必要了解那么多,就了解上面2个很简单的好了,像其他如:WINAPI    CALLBACK    GetWindowText 这些宏现在讲了不但记不住还会增加你们的负担。,我们就在以后要用到的时候再做讲解。

原创粉丝点击