就是通过COM, GUID, ActiveX等技术实现可以后期绑定使用的类。

解决方案 »

  1.   

    Automation提供了一种不同程序模块之间互相操作的规范,服务器定义了自己的属性和方法,客户端通过服务器提供的IDispatch接口可以读取或设置这些属性,并调用服务器的方法使其为自己服务.如果你了解ActiveX控件,理解Automation就不困难了,控件是一种特殊的Automation服务器,控件是以dll(进程服务器)的形式实现的,而Automation无此要求,一般都是以exe实现的(本地服务器),但二者的本质是一样的.
      

  2.   

    Automatio现在应该算是COM的要核心吧
      

  3.   

    那请问asp 的组件算不算一种Automation 服务器?
      

  4.   

    jude,是我问问题还是你问问题呀?:-(
      

  5.   

    BlackSword:
    这里是不可能“详解”的,看来你的啃啃MSDN了!
      

  6.   

    自动化是COM的一种技术,是专门为VB或VBSCRIPT设计的,用来控制其他程序的运行,其实AUTOMATION还是ACTIVEX控件的基础,如果你研究一下控件的代码,你会发现有这样一个接口IDISPATCH,这就是自动化接口,对于自动化而言,应尽量简单还要实用,因此微软定义了DISPATCH接口和VARIANT接口,实际上所有的DISPATCH接口只接受VARIANT变量,就是VB中的VARIANT,这样大大方便了VB编程人员。另外DISPATCH还需要一个简单而有强大功能的接口函数,微软定义了INVOKE函数,来调用所有的AUTOMATION函数。
    实际上,本人觉得AUTOMATION是COM最重要的发明,也是COM中最实用的技术。
    AUTOMATION共分两部分:服务器和客户。在VC中可以很方便的实现这两个部分,只要在APPWIZARD中加入AUTOMATION支持,就可以使用AUTOMATION,其实只是在STDAFX.H中加了#include <afxdisp.h>又在CWinapp的初始化函数中加了AfxOleInit()函数而已,你可以自己使用一下,有什么问题可以EMAIL:[email protected]
      

  7.   

    Automation翻译成“自动化”真是名不副实,很让人费解。Rosement说了不少,
    实际上Automation技术的目的就是让COM组件能够被VB或Script语言方便的调用,
    因为这些语言对COM组件的调用基本上(VB有时不是)是在运行期间而不是编译期间
    决定的,所以需要这样的高级接口。只要你的COM组件支持IDispatch借口,那么
    你的组件就是“自动化”组件了。
      

  8.   

    恕小弟愚浊,小弟还是搞不明白!
    IDispatch接口的Invoke函数调用
    的时候还是需要知道组件的接口
    内容,另外还有Dispatch ID之类
    的东西,到底是干吗的?怎幺用?
    多谢了!:-)
      

  9.   

    推荐你去看书<<VISUAL C++技术内幕>>,那里有详细的介绍!
      

  10.   

    COM & Automation技术的核心思想是把自己应用程序的核心功能以对象树的形式输出,使得所有外部程序都能够通过这棵对象树来使用自己应用程序的功能。为了使任意程序间都能彼此理欠解对方输出的对象树,就需要有统一的规范,微软定义的COM只是其中的一种。而Automation是COM体系下,应用程序实现的一种功能,即提供一个外部对象调用的接口。一个对象的核心是属性和方法调用,目前很少有Automation Server支持事件的输出。从编译器的角度看,在应用程序中使用其它应用程序[Automation Server,例如WORD、EXCEL等]提供的对象有两种方式,分别称为“前期绑定”和“后期绑定”。前期绑定:即编译器己事先了解了AS的各种细节,即它所提供的属性,属性的数据类型,提供的方法,这些方法[即函数]的返回值和调用参数等。则编译器可预先就进行类型检查,编译优化等。为了提供这种功能,AS必须实现类型库;后期绑定,即编译器不知道AS是什么,只知道它是一个对象。因此,所有的属性和方法只能在动态运行过程中,与AS交互后,才知道该属性和方法是否存在。为此,AS必须实现IDispatch接口。由操作系统提供的COM支持系统向该AS询问,获取Dispatch ID,由AS内部实现的IDisaptch接口根据Dispatch ID调用相应的内部支持函数,完成相应功能。目前,一般商用的AS都支持这两种接口。所有主流编程语言都支持COM机制,这些底层的查询己被封装起来。但在自己实现AS时,还是应该了解这些基本概念,在参昭语言的具体实现,完成一个AS。
      

  11.   

    为deerlxy兄补充:
    前期绑定:即vtbl方式,这对于用c/c++等语言没什么问题,通过包含头文件或idl文件,客户程序已可获得有关对象接口的知识,这种方式执行效率较高.
    后期绑定:运行时利用某一众所周知的接口(IDispatch)获得有关对象接口的知识,然后通过IDispatch映射这些接口的方法.这种方式比前期绑定的效率低.
    之所以用IDispatch,是因为如vb之类的语言无法通过前期绑定的方法得到有关接口方法的信息,也就是在编译时不知道对象究竟会实现那些方法,因此只能用一个肯定会被实现的接口(IDispatch)来映射这些方法,这样原本在不同的接口上的许多方法,可以通过IDispatch->Invoke这一个方法来实现,只要用不同的DISPATCH ID来区别他们就行了.
    另外,为了实现运行时动态获得对象接口的信息,Automation提供了ITypeLib等接口,通过这些接口可以知道对象支持那些方法,属性,事件等,以及他们的ID和参数.