何时在类中实现IUnknown 我正在编写一个C++类,它至少从Windows API中消耗一个COM接口。显然,在类中使用这些对象时,我需要正确调用AddRef()和Release() 我的问题是……我需要在C++类本身中另外实现 I未知>代码吗?我的理解是,如果我使用的接口正在执行异步操作或回调,我只需要这样做。在这种情况下,当异步操作或回调完成时,您需要确保C++类本身仍然“活着”。这是正确的吗

何时在类中实现IUnknown 我正在编写一个C++类,它至少从Windows API中消耗一个COM接口。显然,在类中使用这些对象时,我需要正确调用AddRef()和Release() 我的问题是……我需要在C++类本身中另外实现 I未知>代码吗?我的理解是,如果我使用的接口正在执行异步操作或回调,我只需要这样做。在这种情况下,当异步操作或回调完成时,您需要确保C++类本身仍然“活着”。这是正确的吗,c++,com,iunknown,C++,Com,Iunknown,为了澄清(根据Hans的评论),我感兴趣的具体界面是IMFSourceReader(Windows Media Foundation)。此接口默认为同步模式。因此,如果我正确理解了,如果我选择在异步模式下使用它,我只需要在C++类中实现 I未知>代码。否则调用IMFSourceReader->AddRef()或IMFSourceReader->Release就足够了 但是,如果我选择在异步模式下使用IMFSourceReader,则需要IMFSourceReaderCallback接口,该接口本

为了澄清(根据Hans的评论),我感兴趣的具体界面是
IMFSourceReader
(Windows Media Foundation)。此接口默认为同步模式。因此,如果我正确理解了,如果我选择在异步模式下使用它,我只需要在C++类中实现<代码> I未知>代码。否则调用
IMFSourceReader->AddRef()
IMFSourceReader->Release
就足够了

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


我的理解正确吗?我仍处于编写实现的早期阶段,因此没有真正的示例代码可供共享。此时,我只是想确定我的类的基本结构。

只有在您自己实现COM对象时才实现IUnknown,仅使用COM并不要求您实现IUnknown。

您已经阅读了吗?如果它是由Windows实现的COM接口,那么您显然不需要问这样一个模糊的问题。不要索要手册,展示你正在尝试做什么。提示:最好实现一个类似智能指针的包装类,以便正确地执行
AddRef()
Release()
调用(请参阅以供参考)。@user0042:是的,智能指针很有用。然而,我试图完全理解底层的概念,而不仅仅是让智能指针隐藏所有的实现me@MichaelBuckman你可能误解了。你必须实现智能指针(除非使用微软标准的东西)。洛基政策只是一种方式,你可以提供这样的实施适当和安全的方式。谢谢!这正是我要找的。我原以为是这样,但我对COM的研究还处于起步阶段,所以我想确定一下。如果您正在使用的COM对象也公开事件(例如,通过IConnectionPointContainer),并且您希望使用事件接收器订阅这些事件,那么您将被迫实现COM对象(您的事件接收器)为了做到这一点。