C程序设计_课件_15.ppt

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于C#的 .NET Framework程序设计 第10章 数据流和文件 第11章 Internet访问 第12章 序列化 第13章 远程处理和XML Web Service 第14章 线程和异步编程 第15章 托管代码与非托管代码之间的互操作 第16章 使用Microsoft ADO.NET 访问数据 第17章 属性 第15章 托管代码与非托管代码之间的互操作 集成服务 平台调用 在托管代码中调用COM对象 在COM对象中调用.NET对象 集成服务 平台调用介绍 介绍COM的互操作性 Interop 封送处理概述 平台调用介绍 允许托管代码调用在DLL中实现的非托管方法 为下列功能提供机制 定位实现指定函数的DLL,加载DLL到内存中 发现和调用非托管函数 在托管和非托管代码之间进行参数的封送处理 介绍COM的互操作性 COM和 .NET的不同之处 生命期管理 COM:引用计数 对 .NET: 垃圾回收 服务发现 COM:查询接口 对 .NET:反射 对象内存 COM:固定的 对 .NET: 可以移动的 运行库可调用包装 (RCW) 使用托管客户端调用COM对象上的方法 COM可调用包装 (CCW) 使用COM客户端调用托管对象上的方法 Interop 封送处理概述 互操作封送处理控制在方法调用时如何在托管和非托管内存间传递数据 互操作封送处理是CLR封送处理服务执行的运行时活动 Blittable数据类型对托管和非托管内存是一样的,不需要转换-数据类型(C#关键字) System.Byte (byte) System.SByte (sbyte) System.Int16 (short) System.UInt16 (ushort) System.Int32 (int) System.UInt32 (uint) System.Int64 (long) System.IntPtr System.UIntPtr Interop 封送处理概述(续) Non-blittable 类型是那些在托管和非托管内存具有不同表现的类型,需要进行转换 例如,托管字符串就是non-blittable类型 标准RCW和CCW通常为跨COM和.NET边界调用提供了合适的封送处理 可以使用自定义属性选择性地调整运行库表示托管和非托管代码的形式 第15章 托管代码与非托管代码之间的互操作 集成服务 平台调用 在托管代码中调用COM对象 在COM对象中调用.NET对象 平台调用 平台调用工作方式 从托管代码中调用 Win32 API 调用非托管函数 钉住操作 封送处理 平台调用的性能问题及局限性 平台调用工作方式 平台调用工作过程 定位包含被调用方法的DLL 把该DLL加载到内存 查找函数在内存中的地址并将其参数压入堆栈,以封送所需的数据 把控制权移交给非托管函数 平台调用工作方式(续) 从托管代码中调用Win32 API 用static和extern C#关键字声明方法 导入实现非托管函数的DLL 从托管代码中调用Win32 API(续) 调用非托管函数 有两种方法可调用非托管DLL中的方法 使用DLLImport属性 导入System.Runtime.InteropServices命名空间 声明一个静态方法来调用非托管方法,不用提供方法实现 使用DllImport属性标注方法,指定输出非托管方法的DLL的名称 钉住操作 数据被临时锁定在当前内存位置,防止被CLR的垃圾回收器重新分配 数据在托管和非托管代码之间传递时,执行锁定操作 如果对象有固定的布局,在托管和非托管内存中数据表现形式一样,则通过指针进行封送 有固定布局,但数据在托管和非托管内存中表现不一致,通过引用来封送 如果对象没有固定的布局,通过值或者引用传递,如System.String和System.StringBuffer对象 封送处理 大多数数据类型在托管和非托管内存中都有公共的表示形式,而不需要封送拆收器的特殊处理,称为可直接复制到本机结构中的类型 非直接复制到本机结构中的类型在托管和非托管语言中具有不同的或不明确的表示形式。当被封送时,这些类型可能需要转换 用MarshalAs属性来指定自定义封送处理 平台调用的性能问题及局限性 平台调用只支持带整数参数的回调函数 平台调用不对所有类型提供支持 平台调用只支持调用从DLL导出的全局函数 当以引用传递数组类型的参数时,返回的数组大小被调整为 1 实验A 调用 Win32 API 函数 第15章 托管代码与非托管代码之间的互操作 集成服务 平台调用 在托管代码中调用COM对象 在COM对象中调用.NET对象 在托管代码中调用COM对象 运行库可调

文档评论(0)

天马行空 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档