COM接口:dispinterface、Dual、Custom
来源:互联网 发布:windows安装工具 编辑:程序博客网 时间:2024/06/05 17:48
所谓的自动化接口就是用IDispatch实现的接口。我们已经讲解过IDispatch的作用了,它的好处就是脚本语言象VBScript、 JavaScript也能用COM组件了,从而基本上做到了与语言无关它的缺点主要有两个,第一个就是速度慢效率低。这是显而易见的,通过虚函数表一下子就可以调用函数了,而通过Invoke则等于中间转了道手续,尤其是需要把函数参数转换成一种规范的格式才去调用函数,耽误了很多时间。所以一般若非是迫不得已我们都想用VTable的方式调用函数以获得高效率。第二个缺点就是只能使用规定好的所谓的自动化数据类型。如果不用IDispatch我们可以想用什么数据类型就用什么类型,VC会自动给我们生成相应的调度代码。而用自动化接口就不行了,因为Invoke的实现代码是VC事先写好的,而它不能事先预料到我们要用到的所有类型,它只能根据一些常用的数据类型来写它的处理代码,而且它也要考虑不同语言之间的数据类型转换问题。所以VC自动化接口生成的调度代码只适用于它所规定好的那些数据类型,当然这些数据类型已经足够丰富了,但不能满足自定义数据结构的要求。你也可以自己写调度代码来处理你的自定义数据结构,但这并不是一件容易的事。考虑到IDispatch的种种缺点(它还有一个缺点,就是使用麻烦,:-) )现在一般都推荐写双接口组件,称为dual接口,实际上就是从IDispatch继承的接口。我们知道任何接口都必须从 IUnknown继承,IDispatch接口也不例外。那从IDispatch继承的接口实际上就等于有两个基类,一个是IUnknown,一个是IDispatch,所以它可以以两种方式来调用组件,可以通过 IUnknown用虚函数表的方式调用接口方法,也可以通过IDispatch::Invoke自动化调度来调用。这就有了很大的灵活性,这个组件既可以用于C++的环境也可以用于脚本语言中,同时满足了各方面的需要。
相对比的,dispinterface是一种纯粹的自动化接口,可以简单的就把它看作是IDispatch接口 (虽然它实际上不是的),这种接口就只能通过自动化的方式来调用,COM组件的事件一般都用的是这种形式的接口。
a
Custom接口就是从IUnknown接口派生的类,显然它就只能用虚函数表的方式来调用接口了。
相对比的,dispinterface是一种纯粹的自动化接口,可以简单的就把它看作是IDispatch接口 (虽然它实际上不是的),这种接口就只能通过自动化的方式来调用,COM组件的事件一般都用的是这种形式的接口。
a
Custom接口就是从IUnknown接口派生的类,显然它就只能用虚函数表的方式来调用接口了。
阅读全文
0 0
- COM接口:dispinterface、Dual、Custom
- dispinterface接口、Dual接口以及Custom接口
- dispinterface接口、Dual接口以及Custom接口
- IDispatch接口 - Dual和Custom
- IDispatch接口 - Part III - Dual和Custom
- interface 和 dispinterface 区别
- COM接口
- COM接口
- COM接口
- COM - 接口
- dual
- dual
- dual
- COM组件接收器实现(DLL、Custom)
- ATL实现一个组件多个dual接口,multidisp
- COM对象和接口
- COM 对象 和 接口
- COM接口程序
- 院友会 | 朱民:世界金融群和市场波动
- Linux_查看CPU信息、机器型号等硬件信息
- 由于get请求的中文参数乱码
- Kafka集群Broker没起到负载均衡作用
- 133A 读注意的嘤嘤
- COM接口:dispinterface、Dual、Custom
- 关于NGINX图片服务器上传失败
- 浅读Tomcat源码(二)---启动过程
- 荐号 | 11个人工智能与大数据相关的个人、企业优质号
- C语言作业@2017.10.28-10.29
- 节点部署问题的研究内容
- CDlinux U盘启动制作教程
- GAN的入门与实践
- detection dataset