// 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();
}
}