你可以看到一个小表格

时间:2022-01-05 05:12:37

小序
        Win32 API可以直接控制Microsoft Windows的核心,因为API(Application Programming Interface)原来就是微软留给我们直接控制Windows的接口。想玩儿吗?呵呵,太难了。
        C#使用非常简单,写措施就像打拱猪,Sorry  -_-! ,搭积木一样简单。想玩儿吗?呵呵,没步伐直接控制Windows的核心。
        难道就没有分身其美的步伐吗?固然不是!要不微软的产品早就没人买了。其实从C#(或者说.NET平台)挪用Win32 API还长短常简单滴~~~~今天偶们大家就一起来研究研究。

一.    根本常识
        Win32 API是C语言(注意,不是C++语言,尽管C语言是C++语言的子集)函数集。C#语言与C语言是完全差此外(除了语法上对照像),所以,要想用C#语言挪用C语言的Win32 API,要费上一番周折。首先我们就要筹备一些根本常识。
1. Win32 API函数放在哪里?
        Win32 API函数是Windows的核心,好比我们看到的窗体、按钮、对话框什么的,都是依靠Win32函数“画”在屏幕上的,由于这些控件(有时也称组件)都 用于用户与Windows进行交互,所以控制这些控件的Win32 API函数称为“用户界面”函数(User Interface Win32 API),简称UI函数;还有一些函数,并不用于交互,好比打点当前系统正在运行的进程、硬件系统状态的监视等等……这些函数只有一套,但是可以被所有的 Windows措施挪用(只要这个措施的权限足够高),简而言之,API是为措施所共享的。为了到达所有措施能共享一套API的目的,Windows给与 了“动态链接库”的步伐。之所以叫“动态链接库”,是因为这样的函数库的挪用方法是“随用随取”而不是像静态链接库那样“用不用都要带上”。
        这里不太好理解,没关系,我们举个小例子。我们把Windows比做一个游乐场,而把在游乐场里玩儿的小孩比做一个一个措施。小孩在玩的过程中可能要喝 水。我们有两个步伐让小家伙们想喝水的时候就有水喝:1.给每个小家伙配一个水壶,小家伙们喝了的话就喝本身带的水;2.给游乐场配一个饮水机,谁渴了谁 来喝。显然,第二个要领要好得多,这表此刻三个处所。第一,带着水壶,小家伙身体不灵活、玩不爽(影响措施的速度),况且这只是带了一个水壶,要是再带上饭盒呢?还有轮滑、头盔、创可贴、纱布……AK-47 My God,如果带全了就遇上美国大兵了。所以游乐园里还是有个公用“货仓”要来的便利,让大家随用随取(动态链接)。第二,小家伙们带了那么多对象,占了游乐场很多处所,让游乐场拥挤不堪,另外小伴侣就进不来了(措施体积大,影响措施和系统的性能)。第三, 如果某件物品升级了,好比水壶从一升的改为二升的,那么每个小家伙就必需go home去换新的(从头编译措施,由编译器把新的静态库链接进措施主体里),而第二种情况里,只要游乐场把本身货仓里的水壶换个型号,那么所有小家伙就都 在同一时间拥有了大容量的水壶。(悟空!我就一会儿不在,你怎么就乱丢对象?!打到小伴侣多欠好~~~~~)
        悟空已经急了,我就不再叽叽歪歪了……呃……Win32 API函数是放在Windows系统的核心库文件中的,这些库在硬盘里的存储形式是.dll文件。我们常用到的dll文件是user32.dllkernel32.dll两个文件,还有其它一些dll文件也非常重要,大家要在实践中多堆集经验。
        我们知道Win32 API函数是放在dll文件中了,但新问题又来了——我们怎么挪用它们呢?这些dll文件是用C语言写的,源代码经C语言编译器编译之后,会以二进制可执 行代码形式存放在这些dll文件中,就仿佛苹果被打碎机打成就酱后装在罐子里一样——你再也分不清哪个是你GF给你的,哪个是你老妈给你的一样。为了能让 措施使用这些函数,微软在颁布每个新的操纵系统的时候,也会放出这个系统的SDK,目前最新的是Win2003 SP1 SDK,据说Vista的顿时就要放出来,而且已经把UI的API从核心库中疏散出去以提高系统的不变性了。SDK里有一些C语言的头文件(.h文件), 这些文件里描述了核心dll文件里都有哪些Win32 API函数,在写措施的时候,把这些.h文件用#include"....."指令包罗进你的措施里,你就可以使用这些Win32 API了。至于措施是怎样链接的,超过了本文的范畴——也超过了本人的常识范畴:D
         至此,如果你是C语言妙手,已经可以使用Windows SDK去调教Windows了!不过,今天我们讨论的是C#语言挪用Win32 API的问题。我们此刻已经知道API函数放在dll动态链接库文件里,也知道C语言怎么挪用它们了,那么C#语言怎么办呢?C#语言是不能使用C语言 的.h文件的。C#语言也使用dll动态链接库,不过这些dll都是.NET版本的,具有“自描述性”,也就是本身肚子里都有哪些函数都已经写在本身的 metadata里了,不用再附加一个.h文件来说明。此刻,我们已经找到了问题的关键点:如何用.NET平台上的C#语言来挪用Win32平台上的 dll文件。答案非常简单:使用DllImport特性
二.  小试牛刀
        下面,就让我们写一个小措施,试一试如何用C#语言和DllImport特性来挪用Win32 API。