剖析VB.NET平台调用是如何执行操作

开发 后端
这里介绍VB.NET平台调用,平台调用是.NET框架为VB.NET、Visual C#等.NET开发语言提供的一种服务,用以在托管代码中引入各种非托管DLL中封装的函数。

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

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

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

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

VB.NET平台调用、托管DLL、非托管DLL简介:

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

平台调用是.NET框架为VB.NET、Visual C#等.NET开发语言提供的一种服务,用以在托管代码中引入各种非托管DLL中封装的函数(其中包括Windows API函数)。平台调用依赖于元数据在运行时查找导出函数并封装其参数。

平台服务调用非托管DLL中的函数的流程图

公共语言运行库利用平台服务调用非托管DLL中的函数的流程图


在托管代码中使用平台调用服务调用非托管DLL中封装的函数时,平台服务将依次执行以下操作:
1.查找包含该函数所在的DLL文件。
2.如果找到,则将该DLL文件 加载到内存中。
3.查找函数在内存中的地址并将其参数推到堆栈上,并封送所需的数据。
4.将控制权转移给非托管函数。 这样整个函数调用完成。

在VB.NET平台调用服务,申明Windows API函数主要有二种具体的实现方法:
1.使用DllImport特征类来申明Windows API函数。
2.使用“Declare”语句来申明Windows API函数。

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

【编辑推荐】

  1. 全方位分析VB.NET编码规范
  2. 详细说明VB.NET变量中四点
  3. 三类十二种VB.NET数据类型全面介绍
  4. VB.NET初步知识,初学者必看
  5. 具体介绍四大类VB.NET循环
责任编辑:佚名 来源: 天极
相关推荐

2009-10-15 17:50:48

VB.NET调用API

2009-10-21 16:00:26

VB.NET CASE

2009-10-23 13:14:38

2009-10-13 15:09:19

VB.NET使用Tre

2010-01-12 09:51:07

VB.NET操作dbf

2009-11-02 16:22:16

VB.NET面向对象

2009-10-29 11:41:27

VB.NET写Obje

2010-01-21 12:55:08

VB.NET对象序列

2010-01-12 11:47:09

VB.NET可选参数

2010-01-19 18:24:29

VB.NET调用Win

2010-01-22 14:19:38

VB.NET调用jar

2010-01-19 17:32:03

VB.NET流

2009-10-28 10:15:48

VB.NET框架类库

2009-10-12 16:51:28

VB.NET使用Ora

2010-01-14 14:21:07

2010-01-22 15:37:02

VB.NET监控类

2009-10-27 15:49:11

VB.NET分辩率

2010-01-22 14:59:40

VB.NET表单自动提

2010-01-14 18:08:08

VB.NET抽象类

2010-01-07 17:41:19

VB.NET验证LDA
点赞
收藏

51CTO技术栈公众号