小弟最近在看delphi中关于com的部分,有几个问题想请教
1.进程内com服务器和进程内自动化服务器是不是一样的,我看书上的操作步骤不一样
 用了activex后,一个用com object向导,一个用automation object向导,一个用createcomobject,一个用createoleobject,但是我觉得实现的功能好象都相似,没有什么不同,还有进程内的com对象应该是相当于dll吧?是吗?与如果是,那么上面两个创建的dll与用dll wizard创建的dll有什么区别?
2.进程外com服务器与进程外自动化服务器又有什么不同呢?
小弟对上面的概念有些模糊,还请高手请教,小弟先谢过!!

解决方案 »

  1.   

    我也看得很模糊,在看com和activeX的时候机会迷茫,等待高手点拨
      

  2.   

    进程内COM服务器相当于一个DLL,进程外COM服务器就是一个独立的应用程序,可以单独执行。进程外自动化服务器提供了让其它应用程序控件本身的接口,比如说WORD,就可以看成一个进程外自动化服务器。而DirectX就相当于一组进程内服务器.
      

  3.   

    自动化对象其实就是实现了IDispatch接口的对象。它首先也是COM对象。
    创建ActiveX Library会在主程序单元中自动加上对ComServ单元的引用,并加上下面5行
    exports
      DllGetClassObject,
      DllCanUnloadNow,
      DllRegisterServer,
      DllUnregisterServer;
    你也可以创建一个普通的DLL,然后手动加上这几句,效果是一样的。
    进程外组件被调用时在自己的进程运行,通常都是一个EXE;进程内组件被调用时在创建者的进程运行,没有自己的进程,通常都是一个DLL或OCX。
      

  4.   

    1.进程内com服务器和进程内自动化服务器是不是一样的,我看书上的操作步骤不一样
     用了activex后,一个用com object向导,一个用automation object向导,一个用createcomobject,一个用createoleobject,但是我觉得实现的功能好象都相似,没有什么不同,还有进程内的com对象应该是相当于dll吧?是吗?与如果是,那么上面两个创建的dll与用dll wizard创建的dll有什么区别?
    2.进程外com服务器与进程外自动化服务器又有什么不同呢?
    ======================================================
    进程内COM和AutoMation当然不是一样的。楼上的也说了,Automation实现了对IDispatch的支持,再者,他对各种调度应用也是很好的支持,看一看进程内的CreateObject它的实现过程,一个进程内COM可以没有TLB,但是如果一个AtuoMation没有了TLB的话,将会如何?而且,你可以式一试他们Link DataBase的不同后果,但是无论如何说,一个Automation还是COM。也可以这样理解,Automation都是COM的内容,它应用了OLE2.0的更多技术,而且应为实现了IDispatch的支持,他也可以实现回调。进程外COM应该和他有区别,而且是明显的,首先,进程外COM服务是和客户端运行在不同的进程中的,它是一个EXE可执行文件,自己可以在其它的应用程序没有进行任何的操作下进行运行,但是Automation or 进行内COM是不可以的。而Automation可以是不同形式的封装,DLL、OCX等,在应用它的时候,可以仅仅导出TLB,也可以直接以组件的形式让其应用。在某种程序上,Atuomation和COM一样的接近DCOM
      

  5.   

    好像Automation比Com调用更方便,而Com比Automation更调用速度更快.