IDispatch接口是什么?
来源:互联网 发布:me域名续费 编辑:程序博客网 时间:2024/06/05 20:10
IDispatch的存在是因为有些语言不支持虚函数表vtable,比如vb,asp等
它的主要作用是“接收一个函数的名称并执行它”
然后IDispatch有几个函数:
GetIDsOfNames,取一个函数的名称并返回其调度ID,或称DISPID
Invoke,可以将DISPID作为函数数组指针的索引
IDispatch叫做调度接口。它的作用何在呢?这个世上除了C++还有很多别的语言,比如VB、 VJ、VBScript、JavaScript等等。可以这么说,如果这世上没有这么多乱七八糟的语言,那就不会有IDispatch。:-) 我们知道COM组件是C++类,是靠虚函数表来调用函数的,对于VC来说毫无问题,这本来就是针对C++而设计的,以前VB不行,现在VB也可以用指针了,也可以通过VTable来调用函数了,VJ也可以,但还是有些语言不行,那就是脚本语言,典型的如 VBScript、JavaScript。不行的原因在于它们并不支持指针,连指针都不能用还怎么用多态性啊,还怎么调这些虚函数啊。唉,没办法,也不能置这些脚本语言于不顾吧,现在网页上用的都是这些脚本语言,而分布式应用也是COM组件的一个主要市场,它不得不被这些脚本语言所调用,既然虚函数表的方式行不通,我们只能另寻他法了。时势造英雄,IDispatch应运而生。:-) 调度接口把每一个函数每一个属性都编上号,客户程序要调用这些函数属性的时侯就把这些编号传给IDispatch接口就行了,IDispatch再根据这些编号调用相应的函数,仅此而已。当然实际的过程远比这复杂,仅给一个编号就能让别人知道怎么调用一个函数那不是天方夜潭吗,你总得让别人知道你要调用的函数要带什么参数,参数类型什么以及返回什么东西吧,而要以一种统一的方式来处理这些问题是件很头疼的事。IDispatch接口的主要函数是Invoke,客户程序都调用它,然后Invoke再调用相应的函数,如果看一看MS的类库里实现 Invoke的代码就会惊叹它实现的复杂了,因为你必须考虑各种参数类型的情况,所幸我们不需要自己来做这件事,而且可能永远也没这样的机会.
它的主要作用是“接收一个函数的名称并执行它”
然后IDispatch有几个函数:
GetIDsOfNames,取一个函数的名称并返回其调度ID,或称DISPID
Invoke,可以将DISPID作为函数数组指针的索引
IDispatch叫做调度接口。它的作用何在呢?这个世上除了C++还有很多别的语言,比如VB、 VJ、VBScript、JavaScript等等。可以这么说,如果这世上没有这么多乱七八糟的语言,那就不会有IDispatch。:-) 我们知道COM组件是C++类,是靠虚函数表来调用函数的,对于VC来说毫无问题,这本来就是针对C++而设计的,以前VB不行,现在VB也可以用指针了,也可以通过VTable来调用函数了,VJ也可以,但还是有些语言不行,那就是脚本语言,典型的如 VBScript、JavaScript。不行的原因在于它们并不支持指针,连指针都不能用还怎么用多态性啊,还怎么调这些虚函数啊。唉,没办法,也不能置这些脚本语言于不顾吧,现在网页上用的都是这些脚本语言,而分布式应用也是COM组件的一个主要市场,它不得不被这些脚本语言所调用,既然虚函数表的方式行不通,我们只能另寻他法了。时势造英雄,IDispatch应运而生。:-) 调度接口把每一个函数每一个属性都编上号,客户程序要调用这些函数属性的时侯就把这些编号传给IDispatch接口就行了,IDispatch再根据这些编号调用相应的函数,仅此而已。当然实际的过程远比这复杂,仅给一个编号就能让别人知道怎么调用一个函数那不是天方夜潭吗,你总得让别人知道你要调用的函数要带什么参数,参数类型什么以及返回什么东西吧,而要以一种统一的方式来处理这些问题是件很头疼的事。IDispatch接口的主要函数是Invoke,客户程序都调用它,然后Invoke再调用相应的函数,如果看一看MS的类库里实现 Invoke的代码就会惊叹它实现的复杂了,因为你必须考虑各种参数类型的情况,所幸我们不需要自己来做这件事,而且可能永远也没这样的机会.
- IDispatch接口是什么?
- IDispatch 接口
- IDispatch接口
- IDispatch接口
- IDispatch接口
- IDispatch接口
- VC6的IDispatch接口
- IDispatch接口的作用
- IDispatch接口的作用
- IDispatch接口的作用
- C++中IDispatch接口
- ATL IDispatch调度接口
- IDispatch 接口和双接口
- IDispatch接口原理与应用
- IDispatch接口原理与应用
- IDispatch接口原理与应用
- IDispatch接口原理与应用
- IDispatch 接口方法的调用
- 如何解决用XmlSerializer序列化和反序列化一个类, 保存到UTF-8的XML中. 产生的换行符丢失的问题
- 关于变量
- OS Roadmap
- C#中实现GBK码与Unicode码的转换及拼音简码的生成
- 阶码、移码、反码、源码、补码、余三码、循环码等各种码的概念
- IDispatch接口是什么?
- IE地址栏的秘密
- Eclipse Struts Errors集锦
- 弹出式窗口详解
- fileupload
- 梦, 让我遗忘!(1)
- 用javascript来判断浏览器是否禁止了弹出窗口,并在网页中以友好的方式来提示网站浏览者
- 我的 CSDN BLOG 突破1000了。
- response.addHeader("Content-Disposition","attachment; filename="+filename)中的中文乱码问题