欢迎来到天天文库
浏览记录
ID:38198378
大小:85.76 KB
页数:4页
时间:2019-05-25
《API入门系列之一 -那‘烦人’的Windows数据类型》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、先解释一些术语或名词,SDK是SoftwareDevelopmentKit的简写,也就是软件开发包的意思,其中就包含了我们写程序要用到的一些头文件,库,工具,帮助文档之类的。WindowsAPI编程是指调用Windows的接口函数来进行程序的编写,例如MessageBox就是一个API函数或者说接口函数。怎么说都可以,自己理解就行。如果你连这个都不太懂,我想也不会搜到这篇文章了吧~·为什么做这个系列教程呢,请听我一一道来先,最近遇到一些事一些人,让我真的感觉在这方面的引导入门文章真的很是匮乏,加上WindowsSDK头文件中那些复杂,庞大,‘烦人’的宏定义与数据类型定
2、义,对于一个新手来说(我所说的新手不单只刚接触编程的,还特指那些在其他语言领域有比较高造诣的朋友)一个纯SDK写的helloworld程序都算是一个有些困难和挑战的任务了吧。本着帮助别人,高兴自己的原则,我有了这个打算,当然对自己以前所学,所经历做一次回忆,也是这次计划的一部分。声明一下,本系列教程是面向广大初次接触WIN32SDK程序编写的新手朋友们的,如果你是高手,一笑而过吧~当然,除了一笑而过,也多谢你们提出指正文章中的错误,以免我误人子弟啊~~谢谢。废话不多说,进入正题,今天第一篇,讲什么?对于一个新人来说,第一次接触SDK编程或者说API编程,什么最迷惑你们
3、的,我们讲它,我觉得WindowsSDK中那'烦人'的数据类型定义和宏定义应该算这个很角色吧。。其实微软的本意也是善良的,为了减轻程序员的负担,和为了编程的方便,才花了那么多心思与精力定义出了这么一大套数据类型与宏定义,这也是我为什么在之前说它烦人都是加上引号的原因,因为他不是真的烦人,熟练了,你不但不觉得它烦,反而离不开它了,呵呵,日久深情也就是这么来的。呵呵先看几个数据类型定义吧typedeffloatFLOAT;typedeflongLONG;typedefshortSHORTtypedefintINT;typedefcharCHAR;float,long,sh
4、ort,int,char这几个数据类型都是大家熟悉的C/C++的数据类型吧,微软将他们重新定义了一下,很简单,就是改变名字为大写了,这样做的目的大概是微软为了编码的方便吧,输入法大小写都不用切换了,多人性化呀呵呵。再看几个数据类型定义的例子typedefunsignedintUINT;typedefunsignedintUINT32;typedefsignedintINT32;typedefunsignedlongDWORD;typedefunsignedshortWORD;这些数据类型的定义就稍微有实质性作用一些了,注意观察,他们都比较短了,不用写那么长,而且也还比
5、较直观,如果我要定义一个无符号整形,我就不用写unsignedinta;这么长了,只需UINTa;多简单,多明了,所以我说其实不烦人吧。其中DWORD算是SDK程序中可以经常看见的一个数据类型了,经常被使用,很多新手也就不明白,这是什么数据类型啊,现在看到了吧,其实就是无符号长整形unsignedlong,给他取了个外号而已··没什么技术含量,所以不用怕,程序中究竟是写unsignedlong还是DWORD都看你自己心情,因为他们都代表同一种数据类型。下面介绍2个很重要的,经常使用到的,无处不在的数据类型WPARAM,LPARAM,先看看他们定义吧typedefLON
6、G_PTRLPARAM;typedefUINT_PTRWPARAM;先告诉你,这2个数据类型很重要,不是危言耸听,以后你写SDK程序就知道了,看他们的定义如上,有些迷糊?别,我们一步一步分析,我们分析LPARAM。首先定义LPARAM为LONG_PTR也就是用LPARAM的地方也就可以写成LONG_PTR,LONG_PTR又是被定义成什么的呢?typedeflongLONG_PTR;看到了吗?也就是long所以归根结底,LPARAM就是long型,所有LPARAM型的变量,你都可以直接使用long数据类型代替。不过不推荐这样,至于为什么,各位思考思考呢~~以上这些数据
7、类型是参考MSDN中的说明,或者可以查看WinDef.h这个头文件查看这些Windows数据类型的定义,那么也请各位自己推推看LARAM和WPARAM的真面目吧~各位朋友在推导的过程中可能发现LONG_PTR的定义是这样写的#ifdefined(_WIN64)typedef__int64LONG_PTR;#elsetypedeflongLONG_PTR;#endif这是什么意思呢,能看懂英文都能知道这在定义些什么,如果定义了_WIN64这个宏那么就定义LONG_PTR为__int64,否则定义LONG_PTR为long。很简单吧也就是说如果_WIN6
此文档下载收益归作者所有