何时在 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。
我正在编写一个 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。