虽然通过IDispatch接口的运行效率比直接通过vtable进行调用要低一些,但其强大的功能以及灵活性足以弥补效率上的不足。
摘自 COM原理和应用

解决方案 »

  1.   

    IDispatch是给脚本客户调用的,效率比直接vtable调用要低100倍以上。
      

  2.   

    脚本和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上继承。
      

  3.   

    纠正一点:“而且COM端必须运行在CLIENT端的进程地址中,也就是要求COM端只能是DLL的形式。”这句话有错误。只要不通过IDispatch->Invoke进行方法调用就应该算早绑定。而不应该有任何附加条件。
      

  4.   

    IDispatch为了支持脚本语言,对于变量类型也有所限制