Здравствуйте, cls, Вы писали:
cls>Здравствуйте, sidorov18, Вы писали:
S>>Здравствуйте, cls, Вы писали:
S>>>>вот эти?
S>>>>Как и все события..
S>>>>Посмотри в ATL класс IDispEventImpl методы DispEventAdvise/DispEventUnadvise
cls>>>Без ATL.
S>>Ну посмотри, как там, и перенеси этот код))) внутри там все те же вызовы.
S>>вообще технология называется Connection Point.
cls>А где именно внутри? Я ATL не пользовался раньше.
вообще выделенное выше
вот код из atlbase.inl:
/////////////////////////////////////////////////////////////////////////////
// Connection Point Helpers
ATLINLINE ATLAPI AtlAdvise(IUnknown* pUnkCP, IUnknown* pUnk, const IID& iid, LPDWORD pdw)
{
if(pUnkCP == NULL)
return E_INVALIDARG;
CComPtr<IConnectionPointContainer> pCPC;
CComPtr<IConnectionPoint> pCP;
HRESULT hRes = pUnkCP->QueryInterface(__uuidof(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)
{
if(pUnkCP == NULL)
return E_INVALIDARG;
CComPtr<IConnectionPointContainer> pCPC;
CComPtr<IConnectionPoint> pCP;
HRESULT hRes = pUnkCP->QueryInterface(__uuidof(IConnectionPointContainer), (void**)&pCPC);
if (SUCCEEDED(hRes))
hRes = pCPC->FindConnectionPoint(iid, &pCP);
if (SUCCEEDED(hRes))
hRes = pCP->Unadvise(dw);
return hRes;
}