这是在网上看到的一个 Ole 容器的实现
继承了这么多接口, IOleClientSite, IOleInPlaceSiteWindowless, IOleInPlaceFrame, IStorage1、哪里有这些接口的详细说明, MSDN都是英文的, 只了解了大概的意思
2、它继承后,真正有实现的只是
IOleInPlaceSite::GetWindow()
IOleInPlaceSite::GetWindowContext()
这两个接口,其它的接口,不是 return E_NOTIMPL; 就是 return S_OK;
既然没用,又何必去继承它呢?
我尝试把它去掉,但会导致容器里的 ActiveX 控件访问内存出错,这不太合理吧? 至少给个错误提示
继承了这么多接口, IOleClientSite, IOleInPlaceSiteWindowless, IOleInPlaceFrame, IStorage1、哪里有这些接口的详细说明, MSDN都是英文的, 只了解了大概的意思
2、它继承后,真正有实现的只是
IOleInPlaceSite::GetWindow()
IOleInPlaceSite::GetWindowContext()
这两个接口,其它的接口,不是 return E_NOTIMPL; 就是 return S_OK;
既然没用,又何必去继承它呢?
我尝试把它去掉,但会导致容器里的 ActiveX 控件访问内存出错,这不太合理吧? 至少给个错误提示
只要实现某个接口,就必须实现所有的方法,就像继承一个纯虚类必须实现所有纯虚方法一样;
接口的方法都是有特定用途的,如果对某个用途不感兴趣,或者说这个方法根本不影响你需要的功能,那么尽管返回E_NOTIMPL吧,方法的调用者马上就知道你对它不感兴趣。当然有些调用者不认同,非得你返回S_OK才肯继续工作,即使你根本什么都没干;
OLE容器接口都是微软定义的,比尔盖兹只会英语,所以它写出来的文档都是英文的^_^,不过如果你搞清了这些接口的含义,你可以把它翻译成中文再贡献给广大程序员也可以哈;
是不是要实现接口以及实现哪些接口也是看需求的,就像你说的去掉会出错一样,即使全部不干活,也得实现一个空架子,因为这是ActiveX控件规范要求的。