何时在 class 中实现 IUnknown

When To Implement IUnknown in a class

我正在编写一个 C++ class,它使用来自 Windows API 的至少一个 COM 接口。显然,在 class 中使用这些对象时,我需要正确调用 AddRef()Release().

我的问题是...我是否需要在 C++ class 本身中另外实现 IUnknown?我的理解是,如果我使用的接口正在执行异步操作或回调,我只需要这样做。在这种情况下,您需要确保 C++ class 本身在异步操作或回调完成时仍然是 "alive"。这是正确的吗?

为了澄清(以及根据 Hans 的评论),我感兴趣的特定界面是 IMFSourceReader(Windows Media Foundation)。该接口默认为同步模式。再说一次,如果我理解正确,如果我选择在异步模式下使用它,我只需要在我的 C++ class 中实现 IUnknown。否则调用 IMFSourceReader->AddRef()IMFSourceReader->Release 就足够了。

但是,如果我选择在异步模式下使用 IMFSourceReader,则需要 IMFSourceReaderCallback 接口,该接口本身继承了 IUnknown。在那种情况下,我必须在 class 中实现它。

我的理解对吗?我仍处于编写实现的早期阶段,所以我真的没有示例代码可以分享。在这一点上,我只是想确定我的 class 的基本结构。

如果您自己实现一个 COM 对象,您只需要实现 IUnknown,仅使用 COM 不需要您实现 IUnknown。