我设法让自己混淆是否应该从COM服务器方法返回E_NOTIMPL
或E_NOINTERFACE
。
我有一个类,我从我继承的类中重写了两个函数,这两个函数都没有做任何事,因为它们目前还没有真正支持,所以我问我应该使用“not implemented”还是“no”接口“为这些函数返回值?
有没有人对何时使用它们有一般的经验法则?
答案 0 :(得分:6)
如果您未能实现整个界面,那么您的QueryInterface
可以显式返回E_NOINTERFACE
,以便没有人尝试调用其任何方法,或者您可以让所有方法都返回E_NOTIMPL
(在某些边缘情况下执行此操作确实有意义)。如果您部分实现了一个接口,那么您根本不应该返回E_NOINTERFACE
。
答案 1 :(得分:3)
如果某个类未提供所请求接口的完整实现,则返回E_NOINTERFACE。如果类没有实现接口函数的主体/逻辑,则返回E_NOTIMPL。
答案 2 :(得分:2)
您(正式)实现了界面,因此E_NOINTERFACE
不适合您。碰巧有方法没有实现,所以你应该返回E_NOTIMPL
。