COM 映射全局函数
这些函数支持 COM 映射 IUnknown
实现。
函数 | 说明 |
---|---|
AtlInternalQueryInterface | 委托给非聚合对象的 IUnknown 。 |
InlineIsEqualIUnknown | 生成用于将接口与 IUnknown 进行比较的高效代码。 |
要求
标头:atlbase.h
AtlInternalQueryInterface
检索指向所请求的接口的指针。
HRESULT AtlInternalQueryInterface(
void* pThis,
const _ATL_INTMAP_ENTRY* pEntries,
REFIID iid,
void** ppvObject);
参数
pThis
[in] 指向对象的指针,该对象包含公开给 QueryInterface
的接口的 COM 映射。
pEntries
[in] 访问可用接口映射的 _ATL_INTMAP_ENTRY
结构数组。
iid
[in] 要请求的接口的 GUID。
ppvObject
[out] 指向 iid 指定的接口指针的指针;如果未找到接口,则为 NULL。
返回值
标准 HRESULT 值之一。
备注
AtlInternalQueryInterface
仅处理 COM 映射表中的接口。 如果对象已聚合,则 AtlInternalQueryInterface
不会委托给外部未知成员。 可以使用 COM_INTERFACE_ENTRY 宏或它的一个变体将接口输入到 COM 映射表。
示例
// MyTimerProc is a callback function passed to SetTimer()
VOID CALLBACK MyTimerProc(HWND /*hwnd*/, UINT /*uMsg*/, UINT /*idEvent*/,
DWORD /*dwTime*/)
{
LPDISPATCH pDisp = NULL;
// gpMyCtrl is a global variable of type CMyCtrl*
// _GetEntries() is a static function you get with BEGIN_COM_MAP()
AtlInternalQueryInterface (gpMyCtrl, CMyCtrl::_GetEntries(), IID_IDispatch,
(LPVOID*)&pDisp);
//...
pDisp->Release ();
}
InlineIsEqualIUnknown
为 IUnknown
测试的特例调用此函数。
BOOL InlineIsEqualUnknown(REFGUID rguid1);
参数
rguid1
[in] 要与 IID_IUnknown
比较的 GUID。