[vlc-devel] [PATCH] ActiveX: removed IGlobalInterfaceTable from VLCConnectionPoint.

Sergey Radionov rsatom at gmail.com
Thu Mar 22 03:16:23 CET 2012


From: unknown <serg at NB.(none)>

It's excess with event notify system based on windows messages (see EventSystemProxyWnd).
---
 activex/connectioncontainer.cpp |   58 +++++++++++---------------------------
 activex/connectioncontainer.h   |    1 -
 2 files changed, 17 insertions(+), 42 deletions(-)

diff --git a/activex/connectioncontainer.cpp b/activex/connectioncontainer.cpp
index 15f3e0a..a8bd423 100644
--- a/activex/connectioncontainer.cpp
+++ b/activex/connectioncontainer.cpp
@@ -256,11 +256,6 @@ void EventSystemProxyWnd::ProcessNotify()
 VLCConnectionPoint::VLCConnectionPoint(IConnectionPointContainer *p_cpc, REFIID iid) :
         _iid(iid), _p_cpc(p_cpc)
 {
-    // Get the Global Interface Table per-process singleton:
-    CoCreateInstance(CLSID_StdGlobalInterfaceTable, 0,
-                          CLSCTX_INPROC_SERVER,
-                          IID_IGlobalInterfaceTable,
-                          reinterpret_cast<void**>(&m_pGIT));
 };
 
 VLCConnectionPoint::~VLCConnectionPoint()
@@ -271,10 +266,10 @@ VLCConnectionPoint::~VLCConnectionPoint()
 
     while( iter != end )
     {
-        m_pGIT->RevokeInterfaceFromGlobal((DWORD)iter->second);
+        iter->second->Release();
         ++iter;
     }
-    m_pGIT->Release();
+    _connections.clear();
 };
 
 STDMETHODIMP VLCConnectionPoint::GetConnectionInterface(IID *iid)
@@ -307,14 +302,8 @@ STDMETHODIMP VLCConnectionPoint::Advise(IUnknown *pUnk, DWORD *pdwCookie)
     hr = pUnk->QueryInterface(_iid, (LPVOID *)&pUnk);
     if( SUCCEEDED(hr) )
     {
-        DWORD dwGITCookie;
-        hr = m_pGIT->RegisterInterfaceInGlobal( pUnk, _iid, &dwGITCookie );
-        if( SUCCEEDED(hr) )
-        {
-            *pdwCookie = ++dwCookieCounter;
-            _connections[*pdwCookie] = (LPUNKNOWN) dwGITCookie;
-        }
-        pUnk->Release();
+        *pdwCookie = ++dwCookieCounter;
+        _connections[*pdwCookie] = pUnk;
     }
     return hr;
 };
@@ -324,8 +313,8 @@ STDMETHODIMP VLCConnectionPoint::Unadvise(DWORD pdwCookie)
     map<DWORD,LPUNKNOWN>::iterator pcd = _connections.find((DWORD)pdwCookie);
     if( pcd != _connections.end() )
     {
-        m_pGIT->RevokeInterfaceFromGlobal((DWORD)pcd->second);
-        _connections.erase(pdwCookie);
+        pcd->second->Release();
+        _connections.erase(pcd);
         return S_OK;
     }
     return CONNECT_E_NOCONNECTION;
@@ -350,22 +339,15 @@ void VLCConnectionPoint::fireEvent(DISPID dispId, DISPPARAMS *pDispParams)
 
     while( iter != end )
     {
-        DWORD dwCookie = (DWORD)iter->second;
-        LPUNKNOWN pUnk;
+        LPUNKNOWN pUnk = iter->second;
 
-        hr = m_pGIT->GetInterfaceFromGlobal( dwCookie, _iid,
-                                             reinterpret_cast<void **>(&pUnk) );
+        IDispatch *pDisp;
+        hr = pUnk->QueryInterface(_iid, (LPVOID *)&pDisp);
         if( SUCCEEDED(hr) )
         {
-            IDispatch *pDisp;
-            hr = pUnk->QueryInterface(_iid, (LPVOID *)&pDisp);
-            if( SUCCEEDED(hr) )
-            {
-                pDisp->Invoke(dispId, IID_NULL, LOCALE_USER_DEFAULT,
-                              DISPATCH_METHOD, pDispParams, NULL, NULL, NULL);
-                pDisp->Release();
-            }
-            pUnk->Release();
+            pDisp->Invoke(dispId, IID_NULL, LOCALE_USER_DEFAULT,
+                          DISPATCH_METHOD, pDispParams, NULL, NULL, NULL);
+            pDisp->Release();
         }
         ++iter;
     }
@@ -378,21 +360,15 @@ void VLCConnectionPoint::firePropChangedEvent(DISPID dispId)
 
     while( iter != end )
     {
-        LPUNKNOWN pUnk;
+        LPUNKNOWN pUnk = iter->second;
         HRESULT hr;
 
-        hr = m_pGIT->GetInterfaceFromGlobal( (DWORD)iter->second, IID_IUnknown,
-                                              reinterpret_cast<void **>(&pUnk) );
+        IPropertyNotifySink *pPropSink;
+        hr = pUnk->QueryInterface( IID_IPropertyNotifySink, (LPVOID *)&pPropSink );
         if( SUCCEEDED(hr) )
         {
-            IPropertyNotifySink *pPropSink;
-            hr = pUnk->QueryInterface( IID_IPropertyNotifySink, (LPVOID *)&pPropSink );
-            if( SUCCEEDED(hr) )
-            {
-                pPropSink->OnChanged(dispId);
-                pPropSink->Release();
-            }
-            pUnk->Release();
+            pPropSink->OnChanged(dispId);
+            pPropSink->Release();
         }
         ++iter;
     }
diff --git a/activex/connectioncontainer.h b/activex/connectioncontainer.h
index 4f22504..e1b492f 100644
--- a/activex/connectioncontainer.h
+++ b/activex/connectioncontainer.h
@@ -71,7 +71,6 @@ public:
 private:
 
     REFIID _iid;
-    IGlobalInterfaceTable *m_pGIT;
     IConnectionPointContainer *_p_cpc;
     std::map<DWORD, LPUNKNOWN> _connections;
 };
-- 
1.7.7.1.msysgit.0




More information about the vlc-devel mailing list