日期:2014-05-20  浏览次数:20751 次

问个弱弱的问题 关于com/com+的
总是听到com/com+,就是不明白。是不是那些dll,ocx,这些后缀的文件就是com/com+啊。

        就像用c#编个小程序时,用到的基类一样,引用这个dll文件。然后在程序里调用他的方法什么的。这样编译程序后,运行时自然就是调用com组件了啊?

        还有个问题,记得看到过用友u8的安装后的文件,至少几十个dll吧。
是不是在编程的时候,假如每个功能编为一个dll。然后在主form里,引用这些dll。当程序运行时,用到了,自然就调用这个dll文件了,是这样吗?
因为我没编过大程序,即使在一个工程里有好多类文件,我编译后,还是只看到一个exe文件。好像只有单独建个类库工程,编译后,才看到dll。然后能在另一个工程中引用这个dll。是这样的吗?

------解决方案--------------------
1、ActiveX的基础是Com,它本质上是一个Com对象,众所周知的Com对象的最基本接口是IUnknow。对于ActiveX来说,它不仅实现IUnkonow,他还有大量约定的接口要实现,这些复杂的接口都具有规范性,这些规范构成了全部的ActiveX技术。

2、Com+是Com的扩展,他为基本的Com对象提供了缓冲池和事务。通常Com+对象还是一个进程外对象,它存在于一个特定的管理程序中,要成为Com+,Com必须是可重入的,是否支持事务是可选的。Com+环境还未Com对象可重入和支持事务提供了一些便利的基础构造。

3、对于DLL来说,为何使用DLL有很多的原因,对于操作系统来说,这是提供系统服务的界面和入口,对于其他操作系统来说也有类似于Dll的东西,一般都称为动态链接库,这个概念其实是C的静态库衍生而来的,早期的C程序包含库编译后,库一起被编译到了最终执行程序中,这些是静态链接库,但是,有些库很庞大,都编译进去导致可执行程序很大,而且多个共用同样静态库的程序都包含大量相同的代码和资源,十分浪费。这样动态链接也就是程序加载或者执行的时候才加载的库就出现了。后来,操作系统需要某种一致性的界面来提供系统服务,操作系统都是通过软件自陷或者访问违例来进入核心级别的系统服务的,但是有大量的非核心的服务需要提供,也只能采取动态链接库来提供。再后来,操作系统一般不再公布进入核心态服务的方式,而仅公布在用户态所能使用的应用程序接口。

有些软件使用并不广泛,DLL几乎没有重用的为什么还要用呢?这其中主要原因是,多人开发时协调的结果,很多人使用的工具不同,不大可能最后进行统一编译。有些静态库格式也不同,所以只能采用动态库。还有的动态库是买来的工具附带的,比如一些报表控件或者其他的东西。