这是在网上看到的一个 Ole 容器的实现
继承了这么多接口, IOleClientSite, IOleInPlaceSiteWindowless, IOleInPlaceFrame, IStorage1、哪里有这些接口的详细说明, MSDN都是英文的, 只了解了大概的意思
2、它继承后,真正有实现的只是
   IOleInPlaceSite::GetWindow()
   IOleInPlaceSite::GetWindowContext()
   这两个接口,其它的接口,不是 return E_NOTIMPL; 就是 return S_OK;
   
   既然没用,又何必去继承它呢?
   我尝试把它去掉,但会导致容器里的  ActiveX 控件访问内存出错,这不太合理吧? 至少给个错误提示

解决方案 »

  1.   

    父类的接口必须实现, 至于你去掉它,不知道你怎么编译过的?难道是force link?
      

  2.   

    COM的规范:
    只要实现某个接口,就必须实现所有的方法,就像继承一个纯虚类必须实现所有纯虚方法一样;
    接口的方法都是有特定用途的,如果对某个用途不感兴趣,或者说这个方法根本不影响你需要的功能,那么尽管返回E_NOTIMPL吧,方法的调用者马上就知道你对它不感兴趣。当然有些调用者不认同,非得你返回S_OK才肯继续工作,即使你根本什么都没干;
    OLE容器接口都是微软定义的,比尔盖兹只会英语,所以它写出来的文档都是英文的^_^,不过如果你搞清了这些接口的含义,你可以把它翻译成中文再贡献给广大程序员也可以哈;
    是不是要实现接口以及实现哪些接口也是看需求的,就像你说的去掉会出错一样,即使全部不干活,也得实现一个空架子,因为这是ActiveX控件规范要求的。
      

  3.   

    不愿意看MSDN跟我学,买书看!书上有讲解!
      

  4.   

    MSDN上的英文不算难看,因为毕竟都是熟悉的东西