CONNECTDATA operator()(const map<DWORD,LPUNKNOWN>::iterator& i)
{
CONNECTDATA cd;
-
+
+ i->second->AddRef();
+
cd.dwCookie = i->first;
cd.pUnk = i->second;
return cd;
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)
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();