小众知识

首页 > 正文

请com高手指点一二!!

在下已经学过c++,虽不敢说是精通,不过可以说是比较熟悉的,对windows编程也略知一二,我是com的初学者,想精通它还要有哪发面的要求,能不能推荐几本这方面的好书??顺便讲讲你学com的经历??谢谢!  

COM是开发软件组件的一种方法。组件实际上是一些小的二进制可执行程序,它们可以给应用程序,操作系统以及其他组件提供服务。开发自定义的COM组件就如同开发动态的,面向对象的API。多个COM对象可以连接起来形成应用程序或组件系统。并且组件可以在运行时刻,在不被重新链接或编译应用程序的情况下被卸下或替换掉。Microsoft的许多技术,如ActiveX, DirectX以及OLE等都是基于COM而建立起来的。并且Microsoft的开发人员也大量使用COM组件来定制他们的应用程序及操作系统。
COM所含的概念并不止是在Microsoft Windows操作系统下才有效。COM并不是一个大的API,它实际上像结构化编程及面向对象编程方法那样,也是一种编程方法。在任何一种操作系统中,开发人员均可以遵循“COM方法”。
一个应用程序通常是由单个的二进制文件组成的。当编译器生成应用程序之后,在对下一个版本重新编译并发行新生成的版本之前,应用程序一般不会发生任何变化。操作系统,硬件及客户需求的改变都必须等到整个应用程序被重新生成。
这种状况已经发生变化。开发人员开始将单个的应用程序分隔成单独多个独立的部分,也即组件。这种做法的好处是可以随着技术的不断发展而用新的组件取代已有的组件。此时的应用程序可以随新组件不断取代旧的组件而渐趋完善。而且利用已有的组件,用户还可以快速的建立全新的应用。
传统的做法是将应用程序分割成文件,模块或类,然后将它们编译并链接成一个单模应用程序。它与组件建立应用程序的过程(称为组件构架)有很大的不同。一个组件同一个微型应用程序类似,即都是已经编译链接好并可以使用的二进制代码,应用程序就是由多个这样的组件打包而得到的。单模应用程序只有一个二进制代码模块。自定义组件可以在运行时刻同其他的组件连接起来以构成某个应用程序。在需要对应用程序进行修改或改进时,只需要将构成此应用程序的组件中的某个用新的版本替换掉即可。
COM,即组件对象模型,是关于如何建立组件以及如何通过组件建立应用程序的一个规范,说明了如何可动态交替更新组件。
ActiveX与com组件
ActiveX是Microsoft对于一系列策略性面向对象程序技术和工具的称呼,其中主要的技术是组件对象模型(COM)。在有目录和其它支持的网络中,COM变成了分布式COM(DCOM)。在创建包括ActiveX程序时,主要的工作就是组件,一个可以自足的在ActiveX网络(网络主要包括Windows和Mac)中任意运行的程序。这个组件就是ActiveX控件。ActiveX是Microsoft为抗衡Sun Microsystems的JAVA技术而提出的,此控件的功能和java applet功能类似。
如果您使用的是Windows操作系统,您或许会注意到一些以OCX结尾的文件。OCX代表“对象链接与嵌入控件”(OLE),这个技术是Microsoft提出的程序技术,用于处理桌面文件的混合使用。COM的概念已经取代OLE的一部分,Microsoft也使用ActiveX控件代表组件对象。
组件的一大优点就是可以被大多数应用程序再使用(这些应用程序称为组件容器)。一个COM组件(ActiveX控件[1] )可由不同语言的开发工具开发,包括C++和Visual Basic或PowerBuilder,甚至一些技术性语言如VBScript。
ActiveX控件在Windows 95/NT和Macintosh中运行,Microsoft还准备支持UNIX的ActiveX控件。[1] 

 zdk2116 发表于:2003-05-12 20:42:15
得分:0 

我已经看过com技术内幕,com本质论,正在看com+编程指南,不过还是稀里糊涂的,请高手指点!!! 

 hproof 发表于:2003-05-13 11:41:04
得分:0 

com+已经过时了(意外吗?)。

如果你已经熟悉了c++,那下一步应该是c#,.net 

 hproof 发表于:2003-05-13 11:45:58
得分:0 

COM 就是一种编程技术,它符合现代软件工程的核心:高可复用性。
意味着某个系统的开发,可以使用其它系统开发中的“构件”来提靠开发效率,保证软件质量。
这就是COM的本质,它并没有变,并且在c#更加简单、对象化。

 zdk2116 发表于:2003-05-13 17:37:47
得分:0 

你懂不懂的?不懂就不要乱讲!!老兄 

 zdk2116 发表于:2003-05-13 17:40:14
得分:0 

c#.net 我早就学了,什么asp.net 有什么,小玩意而已。底层的东西你知道多少,你只是会做,那有什么了不起。 

 hproof 发表于:2003-05-13 17:47:44
得分:0 

我敢说现代软件工程的最主要的核心之一就是“复用”!
也敢说COM就是为了解决复用问题而产生的!
也敢说C#在建立COM方面确实比以前的什么C++更出色!

错了? 

 hproof 发表于:2003-05-13 17:50:13
得分:0 

底层?我学计算机一个学期就用debug写出磁盘引导病毒了,我就是搞底层的! 

 zdk2116 发表于:2003-05-13 21:03:58
得分:0 

真的有那么厉害?这东西不是说说的,你是哪所大学的?? 

 hehefaint 发表于:2003-05-22 03:19:37
得分:0 

转跳而已嘛。 

 Gandolf 发表于:2003-05-22 05:36:28
得分:0 

to hproof(hproof):
哇,你丫这么牛,你写个Windows 2000下的磁盘引导病毒给我看看。那些DOS下的引导区病毒早就在网上到处都是汇编源码分析了,你还要学一个学期?
不要不知天高地厚。还有这里回复的自以为大牛的人,COM/COM+现在仍然是Windows开发下的主要工具。zdk2116 () 问一句,表示他很谦虚,而且勤奋好学。你们知道就知道,不知道就不要强不知以为知。
COM的确现在算是Windows平台组件模型的底层。COM组件可以被.Net平台的程序使用,同时学习COM结构可以使你对.Net的结构更清楚,毕竟.Net的主要跨语言,跨平台调用的思路是从COM一脉相承来的。
底层是个相对的概念,不是说你懂汇编就是懂底层了,汇编的下面还有机器层。你写个小汇编程序,自以为很高效了,但是你的分支和循环结构以及内存分配方式如果不考虑CPU的流水线,超线程,L1/L2 Cache尺寸的话,你的汇编程序效率可能还不如C。
话回正题,to zdk2116 ():
如果你想好好学COM的话,我推荐Beginning COM programming和Essential COM。你可能需要一点Visual Basic的知识来理解为什么需要IDispatch和Connection Point。最好的Scenario 是先看一本入门书,写两三个有GUI的ActiveX Control,在VB和HTML page里面调用,这样你可以很好的理解COM的跨语言通用的思想。然后你再去钻Marshaller和Apartment,至于Aggregation和Tear-off Interface等等高级一点的技术,以后用到的时候去钻研也不迟。可以自称精通COM的人应该能把普通的Windows程序改写成一个有Document Object Model的ActiveX Server, 能设计合理的模型组件架构,能调试较难的COM bug,熟悉COM+, MTS的机制,能够熟练使用这些机制设计健壮,高可用的DCOM分布式应用。祝你成功。 

 realdreamer 发表于:2003-05-22 08:47:41
得分:0 

楼上的不必这么气冲冲. 有话好好说. 这是讨论技术的地方. 呵呵. 

"zdk2116()" 同学也不必这么炫耀自己, 是金子你会发光的, 写个病毒不算什么, 能解释COM的优点也不算什么. 

在这里炫耀自己或者贬低别人都是很无聊的. 有这个时间还不如去泡MM算了. 

楼上讲了一些不错的书, 我也不必再讲了. 我想讲的是, 理解COM事实上与你的软件开发经历有很大的关系. C++ 这个语言好吧, 是, 的确好, 但如果你没用过其他语言写程序, 那你对C++的理解就和用过其他语言的C++开发者就有差距. 技术的创新总是为了解决问题的. COM也是如此. 你如果没有碰到问题, 你就不容易理解一个为解决此问题的技术. 楼主你讲你"还是稀里糊涂的", 我建议, 多做些实践, 编程这东西, 不是看书听课就完了的.要去做. OK, 胡乱写一气, 见笑了. 


 topikachu 发表于:2003-05-22 10:47:59
得分:0 

说实话.没有vb背景com确实不好理解:)
建议学个一个月的vb,写一两个activeX
这时候你就知道com是干什么的.
然后在学底层也不迟 

 flab_lwq 发表于:2003-05-23 12:33:32
得分:0 

没有面向对象和C++的基础很难理解COM(底层的实现)
有VB的基础可能对COM的应用会理解更快一点 

 lxwde 发表于:2003-05-23 12:48:33
得分:0 

有道理 

上一篇:请问,怎么改变对话框的颜色?
下一篇:数据结构在编程中到底能有多大作用

分享到: