C#面向对象高级编程.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

接口转换C#中不仅支持.Net平台,而且支持COM平台。为了支持COM和.Net,C#包含一种称为属性的独特语言特性。一个属性实际上就是一个C#类,它通过修饰源代码来提供元信息。属性使C#能够支持特定的技术,如COM和.Net,而不会干扰语言规范本身。C#提供将COM接口转换为C#接口的属性类。另一些属性类将COM类转换为C#类。执行这些转换不需要任何IDL或类工厂。现在部署的任何COM组件都可以在接口转换中使用。通常情况下,所需的调整是完全自动进行的。特别是,可以使用运行时可调用包装(RCW)从.NET框架访问COM组件。此包装将COM组件提供的COM接口转换为与.NET框架兼容的接口。对于OLE自动化接口,RCW可以从类型库中自动生成;对于非OLE自动化接口,开发人员可以编写自定义RCW,手动将COM接口提供的类型映射为与.NET框架兼容的类型。◆使用ComImport引用COM组件COMInterop提供对现有COM组件的访问,而不需要修改原始组件。使用ComImport引用COM组件常包括下面几个方面的问题:1、创建COM对象。

2、确定COM接口是否由对象实现。

3、调用COM接口上的方法。

4、实现可由COM客户端调用的对象和接口。(1)创建COM类包装要使C#代码引用COM对象和接口,需要在C#中包含COM接口的定义。完成此操作的最简单方法是使用TlbImp.exe(类型库导入程序),它是一个包括在.NET框架SDK中的命令行工具。TlbImp将COM类型库转换为.NET框架元数据,从而有效地创建一个可以从任何托管语言调用的托管包装。用TlbImp创建的.NET框架元数据可以通过/R编译器选项包括在C#内部版本中。如果使用VisualStudio开发环境,则只需添加对COM类型库的引用,将为您自动完成此转换。TlbImp执行下列转换:

1)、COMcoclass转换为具有无参数构造函数的C#类。

2)、COM结构转换为具有公共字段的C#结构。

检查TlbImp输出的一种很好的方法是运行.NET框架SDK命令行工具Ildasm.exe(Microsoft中间语言反汇编程序)来查看转换结果。虽然TlbImp是将COM定义转换为C#的首选方法,但也不是任何时候都可以使用它(例如,在没有COM定义的类型库时或者TlbImp无法处理类型库中的定义时,就不能使用该方法)。在这些情况下,另一种方法是使用C#属性在C#源代码中手动定义COM定义。创建C#源映射后,只需编译C#源代码就可产生托管包装。执行COM映射需要理解的主要属性包括:1)、ComImport:它将类标记为在外部实现的COM类。2)、Guid:它用于为类或接口指定通用唯一标识符(UUID)。3)、InterfaceType,它指定接口是从IUnknown还是从IDispatch派生。4)、PreserveSig,它指定是否应将本机返回值从HRESULT转换为.NET框架异常。(2)声明COMcoclassCOMcoclass在C#中表示为类。这些类必须具有与其关联的ComImport属性。下列限制适用于这些类:1)、类不能从任何其他类继承。2)、类不能实现任何接口。3)、类还必须具有为其设置全局唯一标识符(GUID)的Guid属性。以下示例在C#中声明一个coclass://声明一个COM类FilgraphManager[ComImport,Guid(E436EBB3-524F-11CE-9F53-0020AF0BA770)]classFilgraphManager{}C#编译器将添加一个无参数构造函数,可以调用此构造函数来创建COMcoclass的实例。(3)创建COM对象COMcoclass在C#中表示为具有无参数构造函数的类。使用new运算符创建该类的实例等效于在C#中调用CoCreateInstance。使用以上定义的类,就可以很容易地实例化此类:classMainClass{publicstaticvoidMain(){FilgraphManager

您可能关注的文档

文档评论(0)

177****8321 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档