COM接口类型

妖精的绣舞 提交于 2019-12-07 09:52:38

COM技术内幕:调度接口与自动化笔记——————

 

自定义接口:custom interface (vtbl接口/常规COM接口)

 

        使用自定义接口时,由接口定义的那些方法都被定义在一个vtable中。对于vtable来说,只有那些方法入口才是有用的。

       

        方法的顺序被定义在接口中。低级的vtbl接口可给C++程序员提供对组件进行有效聚合所需要的额外信息

 

调度接口:diapatch interface

 

       脚本客户端不能处理自定义接口,它们只能使用调度接口。一个调度接口是一个

   IDispatch接口的实现,它可以被脚本客户端理解,所以在编译时不需要知道接口的内存布局。

     

       从方法名获得其ID,以及通过ID调用方法的这些映射机制是需要花时间的。而且除了这种映射机制,还有数据转换的过程。

     

       Invoke仅接受一个参数,这个参数内包含的参数需要通过转换才能用来调用目标方法。

      

       IDispatch::Invoke开销与参数调整的开销导致对于进程内组件效率远低于低级接口(100倍)对于进程外组件(2.5倍)远程组件(~1)

 

双重接口:dual interface

 

       自定义接口可以提供最佳的性能,而调度接口可以被脚本客户端调用。为了两全其美,微软设计出了双重接口。双重接口从IDispatch接口派生,但是添加了一些新的方法到vtable中。只知道IDispatch的客户端可以使用它的GetIDsOfNames和Invoke方法来得到和访问那些方法指针,但是可以访问自定义接口的客户端也可以直接使用它们.

       如果不是确实需要在运行时创建组件,不要去实现纯的dual interface.双重接口比调度接口要脆弱许多。

 

     

     

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!