欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    【大学课件】基于C的NET Framework程序设计.ppt

    • 资源ID:5927190       资源大小:614.51KB        全文页数:38页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    【大学课件】基于C的NET Framework程序设计.ppt

    基于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章 托管代码与非托管代码之间的互操作,集成服务平台调用在托管代码中调用COM对象在COM对象中调用.NET对象,集成服务,平台调用介绍介绍COM的互操作性Interop 封送处理概述,15.1 集成服务,平台调用介绍,允许托管代码调用在DLL中实现的非托管方法 为下列功能提供机制定位实现指定函数的DLL,加载DLL到内存中发现和调用非托管函数在托管和非托管代码之间进行参数的封送处理,15.1.1 平台调用介绍,介绍COM的互操作性,COM和.NET的不同之处生命期管理COM:引用计数 对.NET:垃圾回收服务发现 COM:查询接口 对.NET:反射对象内存 COM:固定的 对.NET:可以移动的运行库可调用包装(RCW)使用托管客户端调用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.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章 托管代码与非托管代码之间的互操作,平台调用,平台调用工作方式从托管代码中调用 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=,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,CharSet=CharSet.Ansi)public static extern int puts(String str);,钉住操作,数据被临时锁定在当前内存位置,防止被CLR的垃圾回收器重新分配数据在托管和非托管代码之间传递时,执行锁定操作如果对象有固定的布局,在托管和非托管内存中数据表现形式一样,则通过指针进行封送有固定布局,但数据在托管和非托管内存中表现不一致,通过引用来封送如果对象没有固定的布局,通过值或者引用传递,如System.String和System.StringBuffer对象,15.2.4 钉住操作,封送处理,大多数数据类型在托管和非托管内存中都有公共的表示形式,而不需要封送拆收器的特殊处理,称为可直接复制到本机结构中的类型非直接复制到本机结构中的类型在托管和非托管语言中具有不同的或不明确的表示形式。当被封送时,这些类型可能需要转换用MarshalAs属性来指定自定义封送处理,15.2.5 封送处理,public static extern int MessageBoxW(int h,MarshalAs(UnmanagedType.LPWStr)string m,);,平台调用的性能问题及局限性,平台调用只支持带整数参数的回调函数平台调用不对所有类型提供支持 平台调用只支持调用从DLL导出的全局函数 当以引用传递数组类型的参数时,返回的数组大小被调整为 1,15.2.6 平台调用的性能问题及局限性,实验A 调用 Win32 API 函数,练习1 在托管代码中调用 Win32 API 函数,集成服务平台调用在托管代码中调用COM对象在COM对象中调用.NET对象,第15章 托管代码与非托管代码之间的互操作,在托管代码中调用COM对象,运行库可调用包装生成运行库可调用包装线程模型签名转换和错误处理封送处理性能和安全问题最佳实践,15.3 在托管代码中调用COM对象,运行库可调用包装,15.3.1 运行库可调用包装,生成运行库可调用包装,用如下3个方法产生运行库可调用包装在Visual Studio.NET工程中添加COM组件的引用使用类型库导入器创建自定义包装,15.3.2 生成运行库可调用包装,线程模型,COM组件使用单元来同步对托管资源的访问当调用COM对象时,运行库创建并初始化一个COM单元确保应用程序的主线程是 STA 模式,15.3.3 线程模型,using System.Threading;using APTOBJLib;Thread.CurrentThread.ApartmentState=ApartmentState.STA;AptSimple obj=new AptSimple();obj.Counter=1;,STAThreadstatic void Main(),签名转换和错误处理,15.3.4 签名转换和错误处理,封送处理,对于将数据封送处理到COM和从COM中封送处理数据的支持是广泛的,并几乎总是提供正确的封送处理行为表格显示了C#类型和相应COM类型的比较 用MarshalAsAttribute属性来改变数据封送行为用两种方法自定义RCW来处理类型编辑互操作程序集手动创建包装类,15.3.5 封送处理,public void M1(MarshalAs(UnmanagedType.LPWStr)String msg);,性能和安全问题,托管和非托管互操作时的转换会造成每次调用10到40个指令的系统消耗限制代码中出现的转换次数一次进行多个API调用在创建COM对象前,设置ApartmentState来阻止代理和存根的创建对可信任代码,当托管代码调用非托管代码时,使用SuppressUnmanagedCodeSecurity属性防止安全检查,15.3.6 性能和安全问题,最佳实践,使用Ildasm.exe来检查已产生程序集的命名空间和类的名称在Visual Basic 6.0或者C+的引用参数在VB.NET将产生一个用ref关键字修饰的参数,15.3.7 最佳实践,实验B 调用 COM 对象,练习1在托管代码中调用COM对象,集成服务平台调用在托管代码中调用COM对象在COM对象中调用.NET对象,第15章 托管代码与非托管代码之间的互操作,从COM对象中调用.NET对象,COM可调用包装导出过程在系统注册表中注册.NET Framework类 使用 ClassInterfaceAttribute在COM中使用.NET Framework 类型 托管和非托管事件最佳实践,15.4 从COM对象中调用.NET对象,COM可调用包装,15.4.1 COM可调用包装,导出过程,程序集中的任何公有类都被转换为类型库中的 coclass将显式实现的接口输出到类型库托管代码 类型库,15.4.2 导出过程,public interface IShape void Draw();void Move(int x,int y);class Circle:IShapevoid Draw();void Move(int x,int y);void Enlarge(int x);,uuid(),dual,odl,oleautomation interface IShape:IDispatch HRESULT Draw();HRESULT Move(int x,int y);uuid()coclass Circle interface IShape;,在系统注册表中注册.NET Framework类,使用Regasm.exe在系统注册表中注册.NET Framework类注册.NET Framework类会在系统 注册表中添加如下注册项Hkey_Classes_RootCLSID注册键中.NET Framework类的CLSID 两个存根键:HKCRCLSIDclass_ID键下的Implemented Categories和InprocServer32 HKCRCLSID 键的默认值为类的 ProgIDInprocServer32 默认被设置为包含公共语言运行库的DLL的名称,15.4.3 在系统注册表中注册.NET Framework类,使用 ClassInterfaceAttribute,类接口提供.NET Framework对象显式公开的所有公共方法、属性、字段和事件 阻止创建类接口 创建一个 dispatch 接口 创建一个双绑定接口,15.4.4 使用ClassInterfaceAttribute,在COM中使用.NET Framework 类型,在非托管代码中使用.NET Framework类设置对描述.NET Framework类的类型库的引用 在 Visual Basic 6.0中,使用引用对话框来设置引用 在 Visual C+6.0中,使用#import 指令来引用类型库创建和使用类型库中定义的类对象,15.4.5 在COM中使用.NET Framework 类型,托管和非托管事件,.NET事件模型和COM中的事件模型不同托管事件是基于委托的,但是COM中的非托管事件是基于连接点的关于下列话题的更多内容,请查看.NET FrameworkSDK 文档处理来自COM源引发的事件 引发COM接收器处理的事件,15.4.6 托管和非托管事件,最佳实践,为COM客户端定义一个显式接口,而不生成类接口因为对托管类的改动会改变类接口的布局可以使用ClassInterfaceType.None阻止产生类接口避免缓存DISPID 使用ClassInterfaceType.AutoDispatch 限制将双绑定接口选项用于类接口,15.4.7 最佳实践,回顾,解释在托管代码和非托管代码之间建立互操作的必要性用平台调用服务来调用DLL中的函数用.NET托管代码调用和访问COM对象的方法和属性使用类型导入程序(Tlbimp.exe)从类型库产生元数据用COM客户端调用.NET Framework类的方法使用类型输出程序(Tlbexp.exe)为程序集产生类型库,学习完本章后,将能够:,

    注意事项

    本文(【大学课件】基于C的NET Framework程序设计.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开