如何在E_NOTIMPL和E_NOINTERFACE之间进行选择?

时间:2012-06-18 23:05:32

标签: c++ oop com hresult

我设法让自己混淆是否应该从COM服务器方法返回E_NOTIMPLE_NOINTERFACE

我有一个类,我从我继承的类中重写了两个函数,这两个函数都没有做任何事,因为它们目前还没有真正支持,所以我问我应该使用“not implemented”还是“no”接口“为这些函数返回值?

有没有人对何时使用它们有一般的经验法则?

3 个答案:

答案 0 :(得分:6)

如果您未能实现整个界面,那么您的QueryInterface可以显式返回E_NOINTERFACE,以便没有人尝试调用其任何方法,或者您可以让所有方法都返回E_NOTIMPL(在某些边缘情况下执行此操作确实有意义)。如果您部分实现了一个接口,那么您根本不应该返回E_NOINTERFACE

答案 1 :(得分:3)

如果某个类未提供所请求接口的完整实现,则返回E_NOINTERFACE。如果类没有实现接口函数的主体/逻辑,则返回E_NOTIMPL。

答案 2 :(得分:2)

您(正式)实现了界面,因此E_NOINTERFACE不适合您。碰巧有方法没有实现,所以你应该返回E_NOTIMPL