【大学课件】基于C的NET Framework程序设计.ppt
《【大学课件】基于C的NET Framework程序设计.ppt》由会员分享,可在线阅读,更多相关《【大学课件】基于C的NET Framework程序设计.ppt(38页珍藏版)》请在三一办公上搜索。
1、基于C#的.NET Framework程序设计,第1章 Microsoft.NET Framework概述第2章 托管执行环境的介绍第3章 使用组件 第4章 部署与版本控制第5章 通用类型系统 第6章 类型的使用 第7章 字符串、数组和集合第8章 委托和事件第9章 内存和资源管理,第10章 数据流和文件 第11章 Internet访问第12章 序列化 第13章 远程处理和XML Web Service第14章 线程和异步编程 第15章 托管代码与非托管代码之间的互操作第16章 使用Microsoft ADO.NET 访问数据第17章 属性,http:/,第15章 托管代码与非托管代码之间的互操
2、作,集成服务平台调用在托管代码中调用COM对象在COM对象中调用.NET对象,集成服务,平台调用介绍介绍COM的互操作性Interop 封送处理概述,15.1 集成服务,平台调用介绍,允许托管代码调用在DLL中实现的非托管方法 为下列功能提供机制定位实现指定函数的DLL,加载DLL到内存中发现和调用非托管函数在托管和非托管代码之间进行参数的封送处理,15.1.1 平台调用介绍,介绍COM的互操作性,COM和.NET的不同之处生命期管理COM:引用计数 对.NET:垃圾回收服务发现 COM:查询接口 对.NET:反射对象内存 COM:固定的 对.NET:可以移动的运行库可调用包装(RCW)使用托
3、管客户端调用COM对象上的方法COM可调用包装(CCW)使用COM客户端调用托管对象上的方法,15.1.2 介绍COM的互操作性,Interop 封送处理概述,互操作封送处理控制在方法调用时如何在托管和非托管内存间传递数据 互操作封送处理是CLR封送处理服务执行的运行时活动 Blittable数据类型对托管和非托管内存是一样的,不需要转换数据类型(C#关键字)System.Byte(byte)System.SByte(sbyte)System.Int16(short)System.UInt16(ushort)System.Int32(int)System.UInt32(uint)System.
4、Int64(long)System.IntPtr System.UIntPtr,15.1.3 Interop 封送处理概述,Interop 封送处理概述(续),Non-blittable 类型是那些在托管和非托管内存具有不同表现的类型,需要进行转换例如,托管字符串就是non-blittable类型标准RCW和CCW通常为跨COM和.NET边界调用提供了合适的封送处理 可以使用自定义属性选择性地调整运行库表示托管和非托管代码的形式,15.1.3 Interop 封送处理概述,集成服务平台调用在托管代码中调用COM对象在COM对象中调用.NET对象,第15章 托管代码与非托管代码之间的互操作,平台
5、调用,平台调用工作方式从托管代码中调用 Win32 API调用非托管函数钉住操作封送处理平台调用的性能问题及局限性,15.2 平台调用,平台调用工作方式,平台调用工作过程定位包含被调用方法的DLL把该DLL加载到内存查找函数在内存中的地址并将其参数压入堆栈,以封送所需的数据 把控制权移交给非托管函数,15.2.1 平台调用工作方式,平台调用工作方式(续),15.2.1 平台调用工作方式,从托管代码中调用Win32 API,用static和extern C#关键字声明方法 导入实现非托管函数的DLL,15.2.2 从托管代码中调用Win32 API,DllImport(,EntryPoint=,
6、CharSet=,从托管代码中调用Win32 API(续),用自定义封送处理信息来覆盖.NET Framework提供默认的封送处理,15.2.2 从托管代码中调用Win32 API,调用非托管函数,有两种方法可调用非托管DLL中的方法使用DLLImport属性导入System.Runtime.InteropServices命名空间声明一个静态方法来调用非托管方法,不用提供方法实现使用DllImport属性标注方法,指定输出非托管方法的DLL的名称,15.2.3 调用非托管函数,using System.Runtime.InteropServices;DllImport(msvcrt.dll,
7、CharSet=CharSet.Ansi)public static extern int puts(String str);,钉住操作,数据被临时锁定在当前内存位置,防止被CLR的垃圾回收器重新分配数据在托管和非托管代码之间传递时,执行锁定操作如果对象有固定的布局,在托管和非托管内存中数据表现形式一样,则通过指针进行封送有固定布局,但数据在托管和非托管内存中表现不一致,通过引用来封送如果对象没有固定的布局,通过值或者引用传递,如System.String和System.StringBuffer对象,15.2.4 钉住操作,封送处理,大多数数据类型在托管和非托管内存中都有公共的表示形式,而不需
8、要封送拆收器的特殊处理,称为可直接复制到本机结构中的类型非直接复制到本机结构中的类型在托管和非托管语言中具有不同的或不明确的表示形式。当被封送时,这些类型可能需要转换用MarshalAs属性来指定自定义封送处理,15.2.5 封送处理,public static extern int MessageBoxW(int h,MarshalAs(UnmanagedType.LPWStr)string m,);,平台调用的性能问题及局限性,平台调用只支持带整数参数的回调函数平台调用不对所有类型提供支持 平台调用只支持调用从DLL导出的全局函数 当以引用传递数组类型的参数时,返回的数组大小被调整为 1,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学课件 【大学课件】基于C的NET Framework程序设计 大学 课件 基于 NET Framework 程序设计
链接地址:https://www.31ppt.com/p-5927190.html