OCX、COMコンポーネントのイベントの接続、切断

(2001.01.01)
// AtlAdvise() と等価
DWORD ConnectSink(LPUNKNOWN punkSource, REFIID iid, LPUNKNOWN punkSink)
{
    ASSERT(punkSource != NULL);
    ASSERT(punkSink);
   
    LPCONNECTIONPOINTCONTAINER pConnPtCont;
   
    if( SUCCEEDED(punkSource->QueryInterface(IID_IConnectionPointContainer, (LPVOID*)&pConnPtCont)) )
    {
        ASSERT(pConnPtCont != NULL);
        LPCONNECTIONPOINT pConnPt = NULL;
        DWORD dwCookie = 0;
       
        if (SUCCEEDED(pConnPtCont->FindConnectionPoint(iid, &pConnPt)))
        {
            ASSERT(pConnPt != NULL);
            HRESULT hr = pConnPt->Advise(punkSink, &dwCookie);
            pConnPt->Release();
        }
       
        pConnPtCont->Release();
        return dwCookie;
    }
   
    return 0;
}
 
// AtlUnadvise() と等価
void DisconnectSink(LPUNKNOWN punkSource, REFIID iid, DWORD dwCookie)
{
    ASSERT(punkSource);
    if (dwCookie == 0)
    {
        ASSERT(0);
        return;
    }
   
    ASSERT(punkSource != NULL);
   
    LPCONNECTIONPOINTCONTAINER pConnPtCont;
   
    if( SUCCEEDED(punkSource->QueryInterface(IID_IConnectionPointContainer, (LPVOID*)&pConnPtCont)) )
    {
        ASSERT(pConnPtCont != NULL);
        LPCONNECTIONPOINT pConnPt = NULL;
       
        if (SUCCEEDED(pConnPtCont->FindConnectionPoint(iid, &pConnPt)))
        {
            ASSERT(pConnPt != NULL);
            pConnPt->Unadvise(dwCookie);
            pConnPt->Release();
        }
       
        pConnPtCont->Release();
    }
}
一覧に戻る
© 2003 WAC.com All Right Reserved.