我为什么选择Win32SDK以及Win32SDK的特点

来源:互联网 发布:通信工程学java有用吗 编辑:程序博客网 时间:2024/05/17 01:44


玩Win32SDK已有一段时间内,从初中的时候就开始了,虽然时间紧,就假期里或插空背着父母玩会,但是两三年下来,收获也是不浅。所以就想着把我学的东西都整理下来,算是纪念吧,如果还能帮助一下别人,也是我的幸运。

初中的时候对计算机感兴趣,学过C语言,对黑窗口厌烦了,就想着做Windows窗口程序,当时还没有研究过C++的高级特性,于是无缘MFC,对C#那种解释性的语言毫无兴趣,至于VB,都学C了想必谁也不愿意学VB(习惯了C的灵活性),F#就更不用说了,当时根本就不知道有F#。-_-||

所以,我开始和Win32SDK打交道,学着学着,我猛然发现,通过Win32SDK,我可以在Windows上做太多我愿意做的事情!甚至我可以替换Win32子系统用户模式下大部分“系统程序”。在很多老前辈写的文章和MSDN的文档的帮助下,我对Win32SDK越来越深入。。。

Win32SDK大致的工作原理如图(画的不好。。)

总结Win32SDK的一些特点和主意事项:

1。高效性,因为Win32SDK比MFC等要更底层,他体现了一种直接与系统交流的特性,因此他的效率高。

2。灵活性,Win32SDK本质就是调用Win32API,微软提供了丰富的API,就像我上文说的 :通过Win32SDK,我可以在Windows上做太多我愿意做的事情!甚至我可以替换Win32子系统用户模式下大部分“系统程序”。

但是Win32SDK也有他本身的缺陷,因为他更底层,所以他相对MFC,C#都要复杂,麻烦,而且资料虽多但都太散,往往为一件事翻很多文章。

Win32SDK本质是调用Win32API,在Intel 80x86 CPU工作下的Windows系统(俗称32位Windows系统),API都是__stdcall的,stdcall是一种函数调用约定,Win32API其实就是函数,stdcall的特点是实参从右往左入栈,被调用者以ret@number返回,返回时已平衡堆栈,因此调用者不需要手动清栈。CALLBACK,WINAPI,APIENTRY等宏都是__stdcall。

(注:64位Windows下(x86-64CPU下,比如ia32e,amd64)64位程序采用fastcall调用约定,32位程序(WOW64)依旧采用stdcall,微软这么做是为了兼容32位的程序)

大多数和字符串有关的API都提供了两个版本,比如MessageBoxA和MessageBoxW,这个和编码有关,一个是用的Ansi编码,一个用的Unicode编码,有关这个问题,我会在下一篇中详细解释。

0 0
原创粉丝点击