是否应该这样理解?(一个初学者的问题)

bokei 2000-03-28 10:08:00
加精
我看了一些有关于COM的书,里面总是提到IUnknow的接口,其实这个接口是什么?是一个类还是一个函数?这个接口有什么用?

我是这样了解COM:COM组件其实是一种特殊的类,不过它遵循一个统一的标准,使到各个软件都可以通过某种方法访问这个类的函数和方法,也就可以做到组件通用.(这样想是否正确?)

以上都是我的一些看法,也许有些太初级了,不过我真的很想弄明白什么是COM,希望各位大虾帮一下忙,小弟在此谢了.(希望那位能够send我一些有关这方面的资料,最好是学习COM的一些经验)
...全文
681 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
highest007 2001-06-12
  • 打赏
  • 举报
回复
book同学发了这么多分啊,早知道我也写两句。
hnxrm 2000-12-25
  • 打赏
  • 举报
回复
lzcwyd 2000-12-25
  • 打赏
  • 举报
回复
对于你的这个问题,我只想简单的说几句。
COM是组件对象模型,她是继面象对向之后的一种思想,而不是一种简单的实现。
通过IDL,很多具体的工作都可以实现她,如VC、VB等。
一句话:COM是接口(组件)的集合,接口是方法和属性的集合。
要了解COM,就得先了解IUnknown接口,IUnknown接口的C++形式的定义如下:
interface IUnknown
{
virtual HRESULT _stdcall QueryInterface([in]REFIID iid,[out]void * * ppv)=0;
virtual ULONG _stdcall AddRef(void)=0;
virtual ULONG _stdcall Release(void)=0;
}
她实现了“接口查询”和“引用计数”,她是一个纯抽象基类。
所有COM 定义的接口都必须从她继承。
实现的COM接口都应该遵守一定的原则:
1。查询IUnknown接口得到的必须一样。
2。接口对称性。
3。接口相互性。
4。接口传递性。
5。时间无关性。
以上,只是对COM解说的一个引子,要学好COM,一定得弄清楚COM的原理。
snowjade 2000-08-13
  • 打赏
  • 举报
回复
其实,COM中的接口和C++中的类有些是相同的,但是也有一些区别,在COM中有一些接口他里面有些函数是微软在出厂时就已经编写好了的,但是,他也提供了一些多余的接口,他只做了定义,但是没有实例化,你可以利用VC编写程序了将他实例化,就可以实现自己要求的功能了,但是你也要编写一个注册程序,至于如何编写要看你利用的接口而定了
snowjade 2000-08-13
  • 打赏
  • 举报
回复
其实,COM中的接口和C++中的类有些是相同的,但是也有一些区别,在COM中有一些接口他里面有些函数是微软在出厂是就已经编写好了的
pam 2000-03-29
  • 打赏
  • 举报
回复
我曾经看到过一套教程,非常好,有生动的例子和循序渐进的说明。最终的结论是,要在Windows平台上实现组件(可独立发布的程序单元)应该是COM现在这种形式。
URL为:http://beta.develop.com/com/contents.asp
比较适合于初学者,只需C++的基础,学起来也比较轻松。学完之后,比看任何一本关于COM的书都要理解得好。
以前MS也有人写过类似的文章,就好像是,从组件的概念出发推导出IUnknown的必然,进一步也就是COM的必然。
这是很有意思的。IUnknown是COM的基础,但COM作为组件体系还需要很多很多东西,于是便演变成今天这么复杂的一项技术。
mach 2000-03-29
  • 打赏
  • 举报
回复
"我是这样了解COM:COM组件其实是一种特殊的类,不过它遵循一个统一的标准,使到各个软件都可以通过某种方法访问这个类的函数和方法,也就可以做到组件通用.(这样想是否正确?)"
你对COM组件的理解是正确的,而com就是你所说的统一的标准--通过接口来调用com组件.接口是你的com组件能被外界所感知的部分,实际就是一组方法(虚函数).
IUnknown是所有接口的基础,他负责两项工作:
IUnknown::QueryInterface负责得到该组件的其他接口的指针
IUnknown::AddRef/Release负责管理该组件的生存期,但有人使用该组件时,保证该组件不会被意外删除;再没人使用该组件时,保证该组件被自动删除


Firing_Sky 2000-03-29
  • 打赏
  • 举报
回复
IUnknow不是类,是接口,是一个虚对象
Marksman 2000-03-29
  • 打赏
  • 举报
回复
如果你学过C++或类似语言的话,这就比较好理解了。在C++里,一个子类可以从父类
继承,这样子类可以复用父类的函数和成员。
在COM里,一个接口和一个类很相似,一个接口可以从另一个接口继承,但是与C++的区别
是,接口的继承只是继承说明,不继承实现。微软规定了所有的标准接口必须从IUnknown
接口“继承”,以获得组件的两个基本能力:引用计数和查询接口。
你的看法基本上基本上是对的。
我申请了一个Free的域名:ComDeveloper.126.com,正在往里面放资料,希望有所帮助
(我自己写的部分就不用看了,:-) ,现在放了一位老外写的学习心得。
Un1 2000-03-29
  • 打赏
  • 举报
回复
IUnknow是一个所有COM对象必须继承的一个接口,拥有3个方法。通过QueryInterface 得到COM对象的新引用,通过AddRef 和Release 增减引用计数以便在没有引用时释放该对象内存。我认为COM就是拥有标准接口的外部类。
关于资料MSDN中很详细。
softdoctor 2000-03-29
  • 打赏
  • 举报
回复
IUnknown接口是一个很普通的类或结构,你甚至可以自己写他,
只是他有特殊的规定,必须有QueryInterface,AddRef,Relaese
方法。可以说他是所有COM类的基类。

原始的IUnknown类是一个纯虚类,什么也不能干,用户必须重载并
实现他的所有方法,之所以要用IUnknown虚拟类,只是为了接口
统一。也就是说所有COM类这三个方法的地址在函数虚拟表中是完全
一样的。
kxy 2000-03-28
  • 打赏
  • 举报
回复
这不是一下可以说清楚的。推荐几本书。
<delphi4编程技术内幕>
潘爱民的 <Com原理与应用> 这是经典。(如果你买不到此书,可以发信给
webmaster@csdn.net, 我们可以邮购)
本站的精品图书中有介绍。
COM确实是为了做到组件通用。具体实现比教麻烦。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧