X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=activex%2Fconnectioncontainer.cpp;h=757f5139154175b1e8f0a5f08479c3060c248bb8;hb=61630d2bd57b7e621263e4a1b7f61f7987caacc6;hp=36e8eba8053319b9211c222888dcb1d864dfe874;hpb=3cf5be6981e175e78056e7923dcac4f942811ea2;p=vlc diff --git a/activex/connectioncontainer.cpp b/activex/connectioncontainer.cpp index 36e8eba805..757f513915 100644 --- a/activex/connectioncontainer.cpp +++ b/activex/connectioncontainer.cpp @@ -35,7 +35,9 @@ struct VLCEnumConnectionsDereference CONNECTDATA operator()(const map::iterator& i) { CONNECTDATA cd; - + + i->second->AddRef(); + cd.dwCookie = i->first; cd.pUnk = i->second; return cd; @@ -115,12 +117,13 @@ STDMETHODIMP VLCConnectionPoint::Advise(IUnknown *pUnk, DWORD *pdwCookie) if( (NULL == pUnk) || (NULL == pdwCookie) ) return E_POINTER; - pUnk->AddRef(); - - *pdwCookie = ++dwCookieCounter; - _connections[*pdwCookie] = pUnk; - - return S_OK; + if( SUCCEEDED(pUnk->QueryInterface(_iid, (LPVOID *)&pUnk)) ) + { + *pdwCookie = ++dwCookieCounter; + _connections[*pdwCookie] = pUnk; + return S_OK; + } + return CONNECT_E_CANNOTCONNECT; }; STDMETHODIMP VLCConnectionPoint::Unadvise(DWORD pdwCookie) @@ -157,7 +160,7 @@ void VLCConnectionPoint::fireEvent(DISPID dispId, DISPPARAMS *pDispParams) if( NULL != pUnk ) { IDispatch *pDisp; - if( SUCCEEDED(pUnk->QueryInterface(IID_IDispatch, (LPVOID *)&pDisp)) ) + if( SUCCEEDED(pUnk->QueryInterface(_iid, (LPVOID *)&pDisp)) ) { pDisp->Invoke(dispId, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, pDispParams, NULL, NULL, NULL); pDisp->Release();