小弟对Automation(自动化)的概念有点模糊,哪位大哥肯详解?

BlackSword 2000-03-01 04:58:00
多谢了!
...全文
523 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
mach 2000-03-16
  • 打赏
  • 举报
回复
为deerlxy兄补充:
前期绑定:即vtbl方式,这对于用c/c++等语言没什么问题,通过包含头文件或idl文件,客户程序已可获得有关对象接口的知识,这种方式执行效率较高.
后期绑定:运行时利用某一众所周知的接口(IDispatch)获得有关对象接口的知识,然后通过IDispatch映射这些接口的方法.这种方式比前期绑定的效率低.
之所以用IDispatch,是因为如vb之类的语言无法通过前期绑定的方法得到有关接口方法的信息,也就是在编译时不知道对象究竟会实现那些方法,因此只能用一个肯定会被实现的接口(IDispatch)来映射这些方法,这样原本在不同的接口上的许多方法,可以通过IDispatch->Invoke这一个方法来实现,只要用不同的DISPATCH ID来区别他们就行了.
另外,为了实现运行时动态获得对象接口的信息,Automation提供了ITypeLib等接口,通过这些接口可以知道对象支持那些方法,属性,事件等,以及他们的ID和参数.
deerlxy 2000-03-13
  • 打赏
  • 举报
回复
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。

rosement 2000-03-13
  • 打赏
  • 举报
回复
推荐你去看书<<VISUAL C++技术内幕>>,那里有详细的介绍!
BlackSword 2000-03-13
  • 打赏
  • 举报
回复
恕小弟愚浊,小弟还是搞不明白!
IDispatch接口的Invoke函数调用
的时候还是需要知道组件的接口
内容,另外还有Dispatch ID之类
的东西,到底是干吗的?怎幺用?
多谢了!

:-)
Marksman 2000-03-12
  • 打赏
  • 举报
回复
Automation翻译成“自动化”真是名不副实,很让人费解。Rosement说了不少,
实际上Automation技术的目的就是让COM组件能够被VB或Script语言方便的调用,
因为这些语言对COM组件的调用基本上(VB有时不是)是在运行期间而不是编译期间
决定的,所以需要这样的高级接口。只要你的COM组件支持IDispatch借口,那么
你的组件就是“自动化”组件了。
rosement 2000-03-12
  • 打赏
  • 举报
回复
自动化是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:ROSEMENT@TELEKBIRD.COM.CN
BlackSword 2000-03-10
  • 打赏
  • 举报
回复
得!看来自己动手,丰衣足食!
Un1 2000-03-02
  • 打赏
  • 举报
回复
BlackSword:
这里是不可能“详解”的,看来你的啃啃MSDN了!
jude 2000-03-02
  • 打赏
  • 举报
回复
我不是想借一下你的光吗:)
包涵包涵
BlackSword 2000-03-02
  • 打赏
  • 举报
回复
jude,是我问问题还是你问问题呀?:-(
jude 2000-03-02
  • 打赏
  • 举报
回复
那请问asp 的组件算不算一种Automation 服务器?
BlackSword 2000-03-02
  • 打赏
  • 举报
回复
各位大哥的回答着实另小弟失望,是不是
每人该打80大板,顺便打斑竹20大板?

土豆 2000-03-01
  • 打赏
  • 举报
回复
Automatio现在应该算是COM的要核心吧
netmare 2000-03-01
  • 打赏
  • 举报
回复
Automation提供了一种不同程序模块之间互相操作的规范,服务器定义了自己的属性和方法,客户端通过服务器提供的IDispatch接口可以读取或设置这些属性,并调用服务器的方法使其为自己服务.如果你了解ActiveX控件,理解Automation就不困难了,控件是一种特殊的Automation服务器,控件是以dll(进程服务器)的形式实现的,而Automation无此要求,一般都是以exe实现的(本地服务器),但二者的本质是一样的.
Un1 2000-03-01
  • 打赏
  • 举报
回复
就是通过COM, GUID, ActiveX等技术实现可以后期绑定使用的类。

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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