COM组件对象与.NET类对象的相互转换

运行环境:Visual Studio.NET Beta2, VC7, C#
参考资料:MSDN
级别:入门级


一、前言

COM组件对象与.NET类对象是完全不同的,但为了使COM客户程序象调用COM组件一样调用.NET对象,使.NET程序
象使用.NET对象一样使用COM组件,MS使用了wrapper技术。本文详细介绍了两种不同的wrapper技术,并给出了
简单的代码实例。


二、COM wrapper简介

传统的COM对象与.NET框架对象模型有以下几点不同:
(1)、COM对象的客户必须自己管理COM对象的生存期,而.NET对象的生存期由CLR(Common Language Runtime)来管
理,即通过GC(Garbage Collection)机制自动回收。

(2)、COM对象的客户通过调用QueryInterface查询COM对象是否支持某个接口并得到其接口指针,而.NET对象的客
户使用Reflection(System.Reflection.*)来获得对象功能的描述,包括方法属性等。

(3)、COM对象的客户通过指针引用COM对象,对象在内存中的位置是不变的,而.NET对象在内存中的驻留由.NET框
架执行环境(execution environment)来管理,对象在内存中的位置是可变的,比如出于优化性能的考虑,同时
会更新所有对对象的引用。这一点也是以CLR中不使用指针为前提的。


为了实现传统的COM程序与.NET程序之间的相互调用,.NET提供了包装类RCW(Runtime Callable Wrapper)和
CCW(COM Callable Wrapper)。每当一个.NET客户程序调用一个COM对象的方法时就会创建一个RCW对象,每当一个
COM客户程序调用一个.NET对象的方法时就会创建一个CCW对象。

具体示意图如图1所示:




图1 COM wrapper overview



三、.NET中调用COM组件

1、RCW(Runtime Callable Wrapper)简介
其示意图如图2所示:




图2 Accessing COM objects through the runtime callable wrapper



RCW的主要功能:
(1)RCW实际上是runtime生成的一个.NET类,它包装了COM组件的方法,并内部实现对COM组件的调用。

(2)列集(marshal).NET客户与COM对象之间的调用,列集的对象包括方法的参数返回值等,比如C#中的string与
COM中的BSTR之间的转换。

(3)CLR为每个COM对象创建一个RCW,与对象上的引用数无关,就是说每个COM对象有且只会有一个RCW对象。

(4)RCW中包含了COM对象的接口指针,并管理COM对象的引用计数。RCW自身的释放通过gc机制管理。

2、实例演示
(1)使用VC7/ATL创建一个最简单的COM对象。组件类名叫AtlComServer,实现的接口名叫IAtlComServer,库名叫
AtlServer。添加一属性Name,并实现Get/Set函数。其idl如下所示:

import "oaidl.idl";
import "ocidl.idl";

[
        object,
        uuid(77506E08-D9FB-4F45-85E0-376F5187AF21),
        dual,
        nonextensible,
        helpstring("IAtlComServer Interface"),
        pointer_default(unique)
]

interface IAtlComServer : IDispatch{
        [propget, id(1), helpstring("property Name")] HRESULT Name([out, retval] BSTR* pVal);
        [propput, id(1), helpstring("property Name")] HRESULT Name([in] BSTR newVal);
};

[
        uuid(9136EEE6-ECEE-4237-90B6-C38275EF2D82),
        version(1.0),
阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: COMComponent Object Model)是微软公司开发的一种面向对象组件对象模型。它是一种可用于编写和调用应用程序的平台和语言无关的技术,具有广泛的应用。COM可以使不同的软件组件相互通信和交互,实现代码的复用和模块化开发。COM技术内幕-微软组件对象模型 PDF是一本关于COM技术的书籍,通过介绍COM技术的原理、架构和编程接口,帮助读者深入理解COM技术的内部工作原理和应用方法。 COM技术内幕-微软组件对象模型 PDF可以帮助读者了解COM的基本概念和核心概念,如COM对象、接口、类工厂等。它还介绍了COM对象的生命周期和内存管理,以及如何使用COM接口进行对象之间的通信和交互。此外,该书还讲解了COM的线程模型、注册表、组件的版本管理和卸载等相关内容。 通过阅读COM技术内幕-微软组件对象模型 PDF,读者可以深入了解COM技术的实现细节和应用技巧,掌握COM的高级编程技巧,提高软件开发和设计的效率。这本书适合有一定编程基础的读者阅读,特别是那些对COM技术感兴趣并希望进一步学习和应用的人员。 总之,COM技术内幕-微软组件对象模型 PDF是一本关于COM技术的详细指南和参考书,它可以帮助读者深入理解COM技术的内部工作原理和应用方法,提高软件开发和设计的技能水平。 ### 回答2: COM技术内幕-微软组件对象模型(Component Object Model,简称COM)是一种面向对象的软件组件模型,由微软公司开发,用于实现软件组件的互操作性。它在Windows操作系统中被广泛应用,为开发人员提供了一种在不同平台和编程语言之间交互的标准接口。 COM技术内幕-微软组件对象模型的PDF是一本介绍COM技术的相关文档。它详细讲解了COM的原理、架构、编程模型和相关的API,介绍了COM组件的开发、注册和部署等方面的知识。 这本PDF不仅适合初学者学习COM技术,也适合有一定基础的开发人员进一步深入了解COM的内部实现和高级特性。它可以帮助开发人员理解COM组件的生命周期、接口的多态性、对象模型的设计原则等重要概念。 此外,这本PDF还介绍了COM组件与.NET和Java等现代开发平台之间的互操作性。它解释了如何在COM组件和这些平台之间进行数据交换、方法调用等操作,为开发人员提供了实现跨平台开发的方法和技巧。 总之,COM技术内幕-微软组件对象模型的PDF对于想要深入理解和应用COM技术的开发人员来说是一本很有价值的参考资料。通过学习这本PDF,开发人员可以更加高效地开发和管理COM组件,提高软件的可复用性和扩展性。 ### 回答3: COMComponent Object Model)是微软公司开发的一种软件组件技术,用于实现软件的组件化开发和复用。COM技术内幕-微软组件对象模型(COM Internals - Microsoft Component Object Model)是一本介绍COM技术的PDF文件。 该PDF文件主要讲解了COM的原理、架构和用法。首先,它介绍了COM的产生背景和发展历程,让读者了解COM的起源和重要性。然后,它详细解释了COM的基本原理和核心概念,如COM对象、接口、类工厂等,帮助读者理解COM组件的结构和运作方式。 接着,该文件介绍了COM的编程模型,即如何使用COM来开发软件。它详细解释了COM的接口定义语言(IDL)和对象创建的过程,以及如何在不同编程语言(如C++、C#等)中使用COM进行开发。 此外,该PDF文件还讨论了COM的生命周期管理、线程安全性和版本控制等重要概念。它指导开发者如何正确地创建、使用和释放COM对象,并提供了一些常见问题的解决方法。 最后,该文件还介绍了COM的扩展技术和相关标准,如COM+、DCOMCOM浏览器等。它展示了COM在分布式系统、Web服务和企业应用中的应用场景,帮助读者拓展对COM技术的应用范围。 总之,COM技术内幕-微软组件对象模型是一本全面介绍COM技术的PDF文件,适合想要深入了解并应用COM技术的开发者和技术爱好者阅读。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xxcc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值