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

How do I choose between E_NOTIMPL and E_NOINTERFACE?

本文关键字:之间 选择 NOINTERFACE 行选 NOTIMPL      更新时间:2023-10-16

我已经设法混淆了我是否应该从我的 COM 服务器方法返回E_NOTIMPLE_NOINTERFACE

我有一个类,

其中包含两个我从我继承的类中重写的函数,这两个函数都不执行任何操作,因为它们目前并不真正受支持,所以我问我应该为这些函数返回值使用"未实现"还是"无接口"?

有没有人对何时使用每种方法有一般的经验法则?

如果你未能实现整个接口,那么你的QueryInterface可以显式返回E_NOINTERFACE,这样没有人尝试调用它的任何方法,或者你可以让所有方法都可以返回E_NOTIMPL(在某些边缘情况下这样做实际上是有意义的)。如果部分实现接口,则根本不应返回E_NOINTERFACE

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

你确实(正式地)实现了接口,所以E_NOINTERFACE不适合你。碰巧您的方法没有有用地实现,因此您应该返回E_NOTIMPL .