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