请问:用IDispatch调用组件,就不用经过vtable了吗?这两种调用的区别如何呢?请高手指点 虽然通过IDispatch接口的运行效率比直接通过vtable进行调用要低一些,但其强大的功能以及灵活性足以弥补效率上的不足。摘自 COM原理和应用 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 IDispatch是给脚本客户调用的,效率比直接vtable调用要低100倍以上。 脚本和VB6。0等是使用IDispatch->Invoke方法进行调用的,也就是晚绑定,MFC的自动化服务器默认的情况下支持的只有晚绑定,MFC中支持早绑定的方法,在ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/vclib/html/_MFCNOTES_TN038.htm有详细的介绍。通过VTABLE访问的情况下,就支持需要支持早绑定,早绑定要求CLIENT必须是支持VTABLE语言的,比如C++,而且COM端必须运行在CLIENT端的进程地址中,也就是要求COM端只能是DLL的形式。同时支持早绑定和晚绑定,那就是双接口,所以双借口只能在IDispatch上继承。 纠正一点:“而且COM端必须运行在CLIENT端的进程地址中,也就是要求COM端只能是DLL的形式。”这句话有错误。只要不通过IDispatch->Invoke进行方法调用就应该算早绑定。而不应该有任何附加条件。 IDispatch为了支持脚本语言,对于变量类型也有所限制 duilib拖动不了窗口 VC程序调试 如何实现CTreeCtrl根目录不显示图标,其它子目录又显示图标? 如何在一个View中控制一个已Create的非模式对话框里的控件 如何获取屏幕的尺寸和分辨率? 关于动态画图? 局域网通信,请各位老兄帮我一把吧! 一个有关GUID如何赋值得问题! 如何唤醒睡了的线程 哪里能装到中文版的MSDN?英文版的看起来太费劲?不知道MSDN如何用。 我不知道New和Delete的具体用途,请帮我看看。 ATL菜鸟提问:什么是 ATL 、有何用?
通过VTABLE访问的情况下,就支持需要支持早绑定,早绑定要求CLIENT必须是支持VTABLE语言的,比如C++,而且COM端必须运行在CLIENT端的进程地址中,也就是要求COM端只能是DLL的形式。
同时支持早绑定和晚绑定,那就是双接口,所以双借口只能在IDispatch上继承。