• MS.NET 平台调用、托管DLL、非托管DLL简介


    (引自天極http://www.yesky.com/240/1846740_1.shtml)
    托管DLL就是能够在公共语言运行库(Common Language Runtime,简称CLR)中能够直接引用的,并且扩展名为“DLL”的文件。具体所指就是封装各种命名空间所在的DLL文件,如System.dll等。非托管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函数。
  • 相关阅读:
    Aurora 数据库支持多达五个跨区域只读副本
    Amazon RDS 的 Oracle 只读副本
    Amazon EC2 密钥对
    DynamoDB 读取请求单位和写入请求单位
    使用 EBS 优化的实例或 10 Gb 网络实例
    启动 LAMP 堆栈 Web 应用程序
    AWS 中的错误重试和指数退避 Error Retries and Exponential Backoff in AWS
    使用 Amazon S3 阻止公有访问
    路由表 Router Table
    使用MySQLAdmin工具查看QPS
  • 原文地址:https://www.cnblogs.com/oisiv/p/378953.html
Copyright © 2020-2023  润新知