0
在ATL中,有一个BEGIN_COM_MAP宏用于声明一个表,该表控制在相应的类对象上调用QueryInterface()时的行为方式。为什么BEGIN_COM_MAP包含DEBUG_QI_ENTRY?
它里面有如下一行:
static const _ATL_INTMAP_ENTRY _entries[] = { DEBUG_QI_ENTRY(x)
这意味着第一个表项将DEBUG_QI_ENTRY它扩展如下:
#ifdef _ATL_DEBUG
#define DEBUG_QI_ENTRY(x) \
{NULL, \
(DWORD_PTR)_T(#x), \
(ATL::_ATL_CREATORARGFUNC*)0},
#else
#define DEBUG_QI_ENTRY(x)
#endif //_ATL_DEBUG
其中有效线索,以每类有这个条目时_ATL_DEBUG被定义。但在CComObjectRootBase :: InternalQueryInterface()有一个断言:
// First entry in the com map should be a simple map entry
//ATLASSERT(pEntries->pFunc == _ATL_SIMPLEMAPENTRY);
当_ATL_DEBUG编译,因为它预计pFunc是_ATL_SIMPLEMAPENTRY(这是1),而是发现由DEBUG_QI_ENTRY 0放在那里它失败只是每类()。
DEBUG_QI_ENTRY()
是什么意思,以及如何使用COM映射宏来避免描述的问题?