您的位置:首页 > 编程语言 > C#

c#_Diff_Between_NormalCom_And_ComInDotNet

2015-11-20 13:47 239 查看
DotNet没有重写所有的COM组件,针对这些没有重写的COM组件,DotNet通过Wrapper的进行封装访问,因此,但凡在COM中存在的问题,在DotNet中自然也存在。COM一般都有TypeLibrary,这个Library存储和管理了接口的Name,ID。但是这个TypeLibrary的可扩展性却比较差,DotNet尝试并最终解决了这个问题。

   MetaData

   一个COM可能有一个TL,也可能没有,仅有的只是一个C++格式的头文件。而在C#中,TL是一定存在的,即使原来的COM没有TL,在实现时也必须通过C#代码进行COM接口的重新定义。在C#中,Com的TL直接存放在Assembly中。

  Memory Free

   在C#中,内存释放通过统一的方式GC实现,而普通的COM则是通过引用计数。

  Data Type

   COM中只允许Automation-Compatiable类型的数据类型,比如Variant,Variant可以表示各种基本数据类型。

  Registry

  COM的信息注册在注册表中,每一个类型都有一个ClassID,这个也是Object的唯一标识,这个ID一般是一个长度为128的数据,客户端可以通过这个ID创建一个实例,由于这个ID比较长,因此,也有一个字符串表示的ProgID,比如Application.Excel,可以直接通过coCreateInstance创建实例。另外,针对接口也有Interface ID,即IID.

  Method Binding

  COM的绑定分为前期绑定,后期绑定。前期绑定可以通过vtable来实现,比如Custom Interface,Dual Interface,这两种都有直接的vtable存储接口,另外可以通过Dispatch Interface的ID绑定实现前期绑定;而后期绑定则是通过Dispatch Interface来实现
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: