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。

另请参阅

函数
COM 映射宏