dotnet下如何使用API函数

dotnet下如何使用API函数,第1张

Windows API就是Windows系统的API函数简称(Application Program Interface,即:应用程序接口函数),它是Windows操作系统提供给各种开发基于Windows平台应用软件的开发语言的一些公用的函数,这些函数一般都比较底层,所以当各种开发语言使用自带的函数或类库已无法解决问题时,调用Windows API函数往往是一种非常直接、有效的解决方法。但由于在程序中调用Windows API函数一般都很复杂,所以对于程序员来说,是否能够灵活的使用Windows API函数,往往也是其水平高低的一个重要标志。但自从微软推出Net框架以后,各种开发基于Net平台下的程序语言,如Visual Basic Net、Visual C#等却很少使用Windows API函数,并且微软公司也不像以前那样,提倡在这些Net开发语言中使用Windows API函数,其主要的原因如下:

  1 Net框架所附带的类库Net FrameWork SDK是一个内容丰富、功能强大的软件开发包,各种Windows API函数所实现的各种功能几乎都可以在这个软件开发包中找到与之对应的部分。

  2 微软Visual Basic Net、Visual C#等目的是编写跨平台的应用程序,如果在Visual Basic Net、Visual C#等中使用Windows API函数,这也就注定了编写出的程序只能运行于Windows平台之下,而弱化了NET的跨平台能力。这也就是为什么微软不提倡在Net平台调用Windows API函数的原因。

  虽然微软并不提倡在Visual Basic Net、Visual C#中调用Windows API函数,但由于目前Net 框架推出时间较短,Net FrameWork SDK中提供的类库还并不足以完全替换Windows API函数的所有功能,所以在某些时候,Net开发语言还是必须要调用Windows API函数。

  一平台调用、托管DLL、非托管DLL简介:

  托管DLL就是能够在公共语言运行库(Common Language Runtime,简称CLR)中能够直接引用的,并且扩展名为“DLL”的文件。具体所指就是封装各种命名空间所在的DLL文件,如Systemdll等。非托管DLL就是平常所的动态链接库等,其中就包括了封装所有Windows API函数的DLL文件。各种非托管DLL中的函数在公共语言运行库中不能直接被调用,而需要经过Net框架提供的“平台调用”服务后才可以。

  “平台调用”是Net框架为Visual Basic Net、Visual C#等Net开发语言提供的一种服务,用以在托管代码中引入各种非托管DLL中封装的函数(其中包括Windows API函数)。“平台调用”依赖于元数据在运行时查找导出函数并封装其参数。图01公共语言运行库利用“平台服务”调用非托管DLL中的函数的流程图:

图01:“平台服务”的调用非托管函数的流程图

  在托管代码中使用“平台调用”服务调用非托管DLL中封装的函数时,“平台服务”将依次执行以下操作:

  1. 查找包含该函数所在的DLL文件。

  2. 如果找到,则将该DLL文件 加载到内存中。

  3. 查找函数在内存中的地址并将其参数推到堆栈上,并封送所需的数据。

  4. 将控制权转移给非托管函数。 这样整个函数调用完成。

  在Visual Basic Net中使用“平台调用”服务,申明Windows API函数主要有二种具体的实现方法:

  1. 使用DllImport特征类来申明Windows API函数。

  2. 使用“Declare”语句来申明Windows API函数。

  这二种方法虽有异曲同工之效,但在繁简上却有很大差异,第一种方法申明过程比较复杂,很容易在申明Windows API函数时出错,所以并不提倡。而第二种方法相对简单,并且又保存了以前Visual Basic中的很多语法,所以在平常时大都使用这种方法来申明Windows API函数。

软件接口软件的未来其实在很大程度上要指望软件接口的前景如何

我们知道,计算机世界里的接口这两个字具有两种众所周知的含义:其一是指软件本身的狭义“接口”,比如各种软件开发API等

其二则指的是人与软件之间的交互界面

我们把这种人-软件之间的接口称作“用户界面”,也就是“UI”

这里要讨论的前一种定义: 软件不同部分之间的交互接口

通常就是所谓的API——应用程序编程接口,其表现的形式是源代码

API的发明和发展大大促进了计算机产业的进步,同时API几乎决定着日常运算的各个方面

大多数程序员秉承为软件用户设计优秀的用户界面思想,这一点早已深入人心

可是,另一方面,如何实现合理的软件API却只为少数人所重视

历史证明,所有在应用上获得成功的软件或者Web应用无一不是首先在API的设计上满足了用户的需求,即便这些用户几乎从不直接使用这些API!早在上个世纪的70年代,Digital Research公司的Gary Kildall为微型计算机首创了世界上第一个实用的软件API

这个初生的API大致上有20多个对操作系统的简单函数调用组成,这个操作系统就是CP/M——那时可是相当的简单和粗糙,而同样简单的API却让整个计算机世界发生了重大变化

Kildall这个很有才气的计算机专家希望自己设计的API能被其他科学工作者采用

至于商用方面的考虑可是想都没想

而且,我们现在的产业现状也证明:仅让科学家们俱欢颜是不会在商业中赚到一分钱的!好在,比尔盖茨认识到,用于应用程序开发人员而不是科学家的API绝对是商业软件获得成功的关键之一,这样一来,情况就很不一样了

随后由比尔盖茨等开发的MS-DOS操作系统全盘拷贝了CP/M及其API,并在这些API的基础之上又增加了一些简单特性,务实的比尔盖茨将Kildall的发明变成了巨大的商业应用并立刻让MS-DOS的API在软件开发中占据了主导地位

然而,当微软公司推出Windows操作系统的时候,系统的庞大API族就没有拷贝Kildall的成果了,可是,事实证明这些微软自己折腾出来的Windows API实在是糟糕的可以:丑陋的代码、混乱的结构等等不一而足

但是,Windows采用了实用的伪多线程技术和高效的内存管理,特别是简单易用的图形界面立刻俘获了一般用户的忠心

大量的程序员也就随之投入到Windows程序的开发中来,这些糟糕的API自然当仁不让了

微软花费了5年多的时间改进和发展早期的Windows并在最终垄断了全球桌面操作系统市场

今天我们谁也离不开Windows API了,除非你不打算编写支持Windows的软件!1988年,微软购买了Alan Cooper开发的可视编程语言:Ruby

随后微软把Ruby和垂死的QuickBASIC语言组合起来创建了Visual Basic

Alan Cooper方面的Ruby实现了名为VBX的软件API,这种API可以让程序员动态地扩展Visual Basic功能,这一事实再次证明了软件接口具有多大的重要性

VBX接口也就是目前火热的组件对象模型COM的前身

在为微软的势力之外,Unix世界也发明了自己的API,这就是TCP/IP,有了它,网络之间就可以自由地通信了

TCP/IP首先在大学里获得了普遍的欢迎,然后,到了20世纪90年代,Marc Andreessen瞄准那些不是程序员却很想从使用计算机获得好处的年轻人推出了世界上第一个Web浏览器:Mosaic,后来在此基础上诞生了Netscape Navigator,可以说,正是Web和浏览器的发明,我们终于被带到了信息时代

最早的Navigator所能作的不外乎就是查找和显示文件,这和Macintosh Finder乃至Windows Explorer也没什么两样,但是,正因为有了TCP/IP API,Netscape 就可以放眼于本机之外查找和显示其他网络上的其他计算机中的文件

新世界豁然洞开

整个90年代,Netscape就象流感病毒一样满世界到处扩散

到了现在计算机之间在通用API的努力下可以非常方便地相互通信,但几乎没有一个用户会直接和这些TCP/IP接口交互

如果没有优秀的、符合时代潮流的API,什么先进的技术都可能会不得不寂寞很长一段时间以等待命运的垂青

一旦成熟的API出现,软件的前景也就能大致看到轮廓了

举个例子,不管是你身上的手机还是随身携带的PDA——比如PalmPilot,它们其实都是处理能力不同的计算机而已,这两种设备都装备了短距无线(通常是红外线)通信端口

可是,它们如何才能通过这些端口实现相互之间的通信呢?如果这些设备之间缺乏公用的API,你的手机就不可能和你的PDA实现通信

今后会产生一种所谓的“陌生人服务”API,比方说,当你走在大街上的时候,你的手持设备,不管是手机、PDA还是笔记本电脑或者车载导航设备就会自动地和周围设施通信,商店、办公室、售货机和其他人等等

目前有几家公司已经在致力于开发以上的通用API,其中最有希望的或许是Sun公司的Jini

但是,Jini的定位和以前的CP/M一样,也是更多的把目标放在了计算机科学家而不是解决方案服务商上

我们今天的软件开发很大一部分是开发Web应用程序,驱动Web进步的是交互设计和商务模式而不是技术创新

从技术上说,Web领域的大开发商不会对Web本身挖掘太多,他们缺乏编写大型、复杂程序的耐心

但是,反过来,这些大型厂商可以把其他开发商预先编写的软件组件组合起来,这样,他们就比以往更多地依赖于为其编写的软件API

总而言之,不管我们设计什么API,最重要的是首先要弄明白我们在为什么目标或者为谁在设计

这是一定要记得的关键点

只有在我们理解目标受众的需求之后,我们才可能创建有用的API,才能实现恰当的用户接口,才能让不同人设计的不同软件部分良好地集成

Direct X是微软公司专为PC游戏开发的API(应用程序接口),特点是:比较容易控制,可令显卡发挥不同的功能,与Windows 95和Windows NT兼容性较好。在Direct X 50中共分六个部分:DirectDraw—管理游戏的视频输出、Direct 3D—管理游戏的3D图形、DirectPlay—管理游戏的网络通讯、DirectSound—管理游戏的声音输出、DirectInput—管理游戏摇杆控制、Direct Setup—管理游戏的安装。

Direct X 微软公司专为PC游戏开发的API,特点是与windows 95和Win-dows NT操作系统兼容性好。可绕过GDI直接进行支持该API的各种硬件的底层操作,大大提高了游戏的运行速度。由于要考虑与各方面的兼容性,Direct- X在3D图形方面的效率比较低,而且用起来比较麻烦。

欢迎分享,转载请注明来源:浪漫分享网

原文地址:https://hunlipic.com/qinggan/7942185.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-09-07
下一篇2023-09-07

发表评论

登录后才能评论

评论列表(0条)

    保存