现在的位置: 首页 > 综合 > 正文

ATL提供了两个关于事件连接点的helper函数,我们拿来可以放心用了。

2012年09月06日 ⁄ 综合 ⁄ 共 1049字 ⁄ 字号 评论关闭
我们在AtlBase.h的头文件中可以看到下面代码:
/////////////////////////////////////////////////////////////////////////////
// Connection Point Helpers

ATLINLINE ATLAPI AtlAdvise(IUnknown* pUnkCP, IUnknown* pUnk, const IID& iid, LPDWORD pdw)
{
    CComPtr<IConnectionPointContainer> pCPC;   //连接点的容器,或者叫事件的服务端
    CComPtr<IConnectionPoint> pCP;                        //连接点对象
    HRESULT hRes = pUnkCP->QueryInterface(IID_IConnectionPointContainer, (void**)&pCPC);
    if (SUCCEEDED(hRes))
        hRes = pCPC->FindConnectionPoint(iid, &pCP);        //找到连接点
    if (SUCCEEDED(hRes))
        hRes = pCP->Advise(pUnk, pdw);                                   //挂接
    return hRes;
}

ATLINLINE ATLAPI AtlUnadvise(IUnknown* pUnkCP, const IID& iid, DWORD dw)
{
    CComPtr<IConnectionPointContainer> pCPC;
    CComPtr<IConnectionPoint> pCP;
    HRESULT hRes = pUnkCP->QueryInterface(IID_IConnectionPointContainer, (void**)&pCPC);
    if (SUCCEEDED(hRes))
        hRes = pCPC->FindConnectionPoint(iid, &pCP);
    if (SUCCEEDED(hRes))
        hRes = pCP->Unadvise(dw);                                            
    return hRes;
}

写的很精练,职能指针用的比较多!hoho!

看到有意思的东西就把它记下来,分享给大家!
 

抱歉!评论已关闭.