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来实现相关文章推荐
- C#根据文件流判断文件类型
- C#中进行单元测试
- C#中Trim()、TrimStart()、TrimEnd()的用法
- C#中的内存四区
- C#程序集编译输出XML文档的作用
- KING_C#学习之QRCode二维码(一)——基础知识扫盲
- C# winform控件之弹出窗口学习积累
- String Format for DateTime [C#]
- List集合Null值判断新技能
- Mono为何能跨平台?聊聊CIL(MSIL)
- c# process 获取进程退出码
- 字符串拼接新技能
- C# 自定义等待窗口
- .NET进阶系列之一:C#正则表达式整理备忘
- 匹夫细说C#:庖丁解牛迭代器,那些藏在幕后的秘密
- 委托的简化语法,聊聊匿名方法和闭包
- c#的AOP实现,面向领域编程
- 大白话系列之C#委托与事件讲解(一)
- C#if if else笔记
- UPW学习资料整理 .NET C# 转