双接口就是接口从IDispatch继承。可以通过IDispatch访问也可以通过自定义接口访问
早绑定就是在编译时确定接口方法,晚绑定就是运行时确定接口方法,是通过IDispatch访问的,所以一定要支持IDispatch才行

解决方案 »

  1.   

    这个问题总见人问。
    Automation使用IDispatch接口进行,非IDispatch接口都是用早绑定,称为vtable绑定。IDispatch才分早绑定和迟绑定。迟绑定就是编译时不必知道IDispatch都有哪些属性和方法,由IDispatch::Invoke去解决,有一种DISPID绑定,可以认为是早绑定的一种,编译时知道属性和方法的DISPID。迟绑定比较慢,所以出现了双接口,IDispatch的方法和属性同时作为双接口的方法,支持双接口的工具可以事先知道接口方法、属性的vtable位置,进行vtable绑定。因此双接口同时支持上述的三种绑定。
    VC/MFC的COleDispatchDriver支持迟绑定,#import支持vtable绑定,ATL支持vtable绑定。
    VB支持vtable绑定,DISPID绑定,迟绑定。
    script一般只支持迟绑定。
      

  2.   

    谢谢你的回答,我还有一个问题:
    VC/MFC在写com的时候都要选上automation,那是不是所有用mfc写的com都是自动化吗?
      

  3.   

    MFC开发的COM是不支持双接口的,是不是IDispatch我不知道,可能是吧.建议用ATL