gpt4 book ai didi

c++ - COM_INTERFACE_ENTRY_BREAK 宏不起作用

转载 作者:行者123 更新时间:2023-11-30 03:03:09 25 4
gpt4 key购买 nike

我有一个 ATL 类。我想知道何时调用此类的 QueryInterface 以消除内存泄漏。

我在 COM_MAP 中添加了 COM_INTERFACE_ENTRY_BREAK,现在它看起来像:

BEGIN_COM_MAP( CMyClass )
COM_INTERFACE_ENTRY( IFace1 )
COM_INTERFACE_ENTRY( IFace2 )

//COM_INTERFACE_ENTRY_BREAK(IUnknown) // i included this too
COM_INTERFACE_ENTRY_BREAK( IFace1 )
COM_INTERFACE_ENTRY_BREAK( IFace2 )
END_COM_MAP()

当我开始调试(按 F5)时,QI 操作后没有断点。我确定调用了 QI,因为 _ATL_DEBUG_INTERFACES 在输出窗口中显示泄漏

ATL:QIThunk - 4 LEAK:Object = 0x02150CC0 Refcount = 1 MaxRefCount = 2 CMyClass - IUnknown

我应该怎么做才能在 QI 调用时停止断点?

谢谢。

最佳答案

很明显,您需要在 AddRef() 调用而不是 QI 调用上设置断点。是的,痛苦的是,如果您使用 ATL 包装器,那么从服务器中查找客户端代码中的引用计数错误并不是一件好事。与尝试通过在 new/delete 运算符上设置断点来诊断内存泄漏没有其他根本区别,但效果也不佳。

您可以在 atlcom.h 中的 InternalAddRef() 方法上设置断点。但它可能会很嘈杂,如果您的服务器中有很多接口(interface),它可能会导致调试器在一段时间内变得紧张。

关于c++ - COM_INTERFACE_ENTRY_BREAK 宏不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9582834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com