我正在编写一个C ++类,它至少使用一个来自Windows API的COM接口。显然,当在课堂内使用这些对象时,我需要正确地调用AddRef()
和Release()
。
我的问题是......我是否需要在C ++类中另外实现IUnknown
?我的理解是,如果我使用的接口正在执行异步操作或回调,我只需要这样做。在这种情况下,您需要确保C ++类本身仍然是#34; alive"异步操作或回调完成时。这是对的吗?
为了澄清(以及Hans'评论),我感兴趣的具体界面是IMFSourceReader
(Windows Media Foundation)。此接口默认为同步模式。所以,如果我理解正确的话,我只需要在我的C ++类中实现IUnknown
,如果我选择在异步模式下使用它。否则,拨打IMFSourceReader->AddRef()
或IMFSourceReader->Release
即可。
但是,如果我选择在异步模式下使用IMFSourceReader
,则需要IMFSourceReaderCallback
接口,该接口本身会继承IUnknown
。在那种情况下,我必须在课堂上实现它。
我的理解是否正确?我仍处于编写实现的早期阶段,因此我并没有真正拥有示例代码来共享。在这一点上,我只是试图让我班级的基本结构得到确定。
答案 0 :(得分:3)
如果您自己实现COM对象,则只实现IUnknown,仅使用COM不需要实现IUnknown。