小弟初学分布式开发,也看了一些书,有些概念很模糊,问几个入门问题,望赐教:(50分)

  • 主题发起人 主题发起人 feiren
  • 开始时间 开始时间
F

feiren

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟初学分布式开发,也看了一些书,有些概念很模糊,问几个入门问题,望赐教:
1。一个com服务器里是不是可以有多个com对象?
2。还是一个com服务器本身就是一个com对象?
如果答案是1,那么何为com对象?是不是接口里的每一个方法或属性都可称为一个com对象?还datasetprovider组件是不是一个com对象?
能不能举个例子给小弟?
谢谢。
 
是不是太简单了,都不愿意帮我啊?
 
你的问题。。。。。。。。。。。。。。。。。。。。。。。。




太难了[:D]
 
com服务器有MS的MTS/COM+,你自已也可以開發一個進程外的服務器.
就象JAVA里的weblogic,Jboss的EJB容器.
一COM對象包含有多具接口和方法!
 
你的意思是说一个com就是一个有写书上所写的com对象
 
1.一个COM对象可以有多个对象存在(通过不同的接口来调用);
2.一个COM服务器本身就是一个COM对象(只是提供了ICLASSFACTORY接口)。
两者并不矛盾,因为一般的COM服务器中至少有2个对象:一个是对象类工厂(产生COM对象),一个是有类工厂产生的我们需要的COM对象,类工厂一般我们并不需要,只是在系统加载(查找注册表)时候必须要有一个提供IClassFactory接口的对象存在(一般在DLL初始化时候就建立这个对象并向导出方法提供它的指针),然后通过这个对象来查找我们需要的对象,这个时候如果没有建立相应对象就让工厂建立,如果建立了就使用相应对象并使计数器加1。datasetprovider本质上讲也是一个COM对象,但它是一个DCOM,可以完成网络范围的对象接口和参数传递!
就说这么多了,再多就更复杂了,找本书好好看看吧!
 
谢谢晶兄
 
一个COM对象就是一个实现了若干个接口(interface)的类(class),且这个类要是TComObject的子类。
多个COM对象写在一个DLL或EXE里,这个DLL或EXE就是一个COM服务器是。
注册COM服务器时也同时把COM服务器中的所有COM对象注册。
例如:
TMyComObject就是一个COM对象,实质上是一个类,只是这个类是TComObject的子类,TMyComObject实现了IMyInt1和IMyInt2两个接口。
在接口中只有方法,没有数据域,且方法是没有实现的,即是只有声明。为了实现接口中的方法需要定义一个类,这个类以多重继承的方式继承要实现的接口。
一个接口有一个唯一的ID叫IID,一个类也有一个唯一的ID叫CLSID,IID和CLSID都是GUID,只是叫法不同而已。
type
IMyInt1 = interface
[接口的IID]
procedure Method1;
end;

IMyInt2 = interface
[接口的IID]
procedure Method2;
end;

TMyComObject = class(TComObject, IMyInt1, IMyInt2)
[类的CLSID]
procedure Method1;
procedure Method2;
end;

TMyComObject.Method1;
begin
ShowMessage('我实现了IMyInt1接口的Method1方法');
end;

TMyComObject.Method2;
begin
ShowMessage('我实现了IMyInt2接口的Method2方法');
end;

上述的COM对象TMyComObject是在一个DLL或EXE中的,这个DLL或EXE就是一个COM服务器,COM服务器也有一个自己的唯一的GUID,用于区分其它COM服务器。
当然这个COM服务器中也可以存在多个COM对象,这就看你的应用需要。
最后要注意的是:
COM对象中的“对象”一词与面向对象中的“对象”是不同的概念,不要把两者搞乱。
“接口”这一词也可能会使你以为是程序的什么接口,当然这样想也没错,接口实际上是一种声明形式,声明了一组相关的方法,这些方法还有待实现。
COM对象只是TComObject的子类。
还有的是ActiveX组件其实也是一个COM对象,ActiveX组件通常是放在一个OCX或DLL文件中的,这个OCX或DLL也是一个COM服务器,同样这里面又可以有多个ActiveX组件。因此ActiveX技术是基于COM技术的,这样就不难理解OLE之类的东西了,它也是基于COM的。
COM技术是Windows中的组成部分,也是许多其它技术的基础,是跨进程、跨计算机的一种进程通信技术。是1992年Microsoft创立的技术标准。
 
补充一点:
COM对象是一个静态的,而COM对象实例是动态的,它们的关系就像面向对象中的类和对象的关系一样,类是静态的,对象是动态的。不过我们通常只说COM对象,很少说COM对象实例。
对COM对象实例的所有操作只能通过它的接口来进行,而属性也只是一些get和set的方法。
 
我在这里要只能简单地说一下,基本能消除你概念上的疑问,但想了解更多的内容你可以看一看《Windows 2000 编程技术内幕》一书中有关COM技术的章节,不过你需要对VC++编程有一定的了解。
其次就是有关类工厂,由于“晶晶”朋友已经说得比较清楚了,我在此没不多说了。
其实类工厂也不是什么神秘的东西,它也中是一个类,一个COM对象的这种类,它是的工作就是为你创建你的COM对象实例提供一种方便高效的方法,但创建一个COM对象实例不一定非要用类工厂不可,可以直接用CreateComObject API函数来创建,但这样需要在注册表中查找CLSID和IID才能确定是那个COM对象和返回的接口引用,而在类工厂中是直接用COM对象的构造函数来创建COM对象实例的,因而速度非常快,这样对创建大量COM对象实例的时候有好处。
 
谢谢,非常感谢,马上揭贴
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部