From: Steve Lamerton Date: Thu, 22 Dec 2011 19:16:12 +0000 (+0000) Subject: Use OLE helper macros in wxWebView to reduce the amount of duplicated code. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/9f194b9de02cb8d889bb53c87ab2dadad6695283 Use OLE helper macros in wxWebView to reduce the amount of duplicated code. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70096 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/msw/webview_ie.h b/include/wx/msw/webview_ie.h index d5304e2a7e..690f3d3b92 100644 --- a/include/wx/msw/webview_ie.h +++ b/include/wx/msw/webview_ie.h @@ -18,6 +18,7 @@ #include "wx/webview.h" #include "wx/msw/ole/automtn.h" #include "wx/msw/ole/activex.h" +#include "wx/msw/ole/oleutils.h" #include "wx/msw/wrapwin.h" #include "wx/msw/missing.h" #include "wx/sharedptr.h" @@ -295,7 +296,6 @@ private: class VirtualProtocol : public wxIInternetProtocol { protected: - ULONG m_refCount; wxIInternetProtocolSink* m_protocolSink; wxString m_html; VOID * fileP; @@ -305,12 +305,10 @@ protected: public: VirtualProtocol(wxSharedPtr handler); - ~VirtualProtocol(); + ~VirtualProtocol() {}; //IUnknown - ULONG STDMETHODCALLTYPE AddRef(); - HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject); - ULONG STDMETHODCALLTYPE Release(); + DECLARE_IUNKNOWN_METHODS; //IInternetProtocolRoot HRESULT STDMETHODCALLTYPE Abort(HRESULT WXUNUSED(hrReason), @@ -341,18 +339,17 @@ public: class ClassFactory : public IClassFactory { public: - ClassFactory(wxSharedPtr handler) : m_refCount(0), m_handler(handler) {} - //IUnknown - ULONG STDMETHODCALLTYPE AddRef(); - HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject); - ULONG STDMETHODCALLTYPE Release(); + ClassFactory(wxSharedPtr handler) : m_handler(handler) {} //IClassFactory HRESULT STDMETHODCALLTYPE CreateInstance(IUnknown* pUnkOuter, REFIID riid, void** ppvObject); HRESULT STDMETHODCALLTYPE LockServer(BOOL fLock); + + //IUnknown + DECLARE_IUNKNOWN_METHODS; + private: - ULONG m_refCount; wxSharedPtr m_handler; }; diff --git a/src/msw/webview_ie.cpp b/src/msw/webview_ie.cpp index 1ddf1efc7e..17e63ec3f3 100644 --- a/src/msw/webview_ie.cpp +++ b/src/msw/webview_ie.cpp @@ -1051,50 +1051,17 @@ void wxWebViewIE::onActiveXEvent(wxActiveXEvent& evt) VirtualProtocol::VirtualProtocol(wxSharedPtr handler) { - m_refCount = 0; m_file = NULL; m_handler = handler; } -VirtualProtocol::~VirtualProtocol() -{ -} +BEGIN_IID_TABLE(VirtualProtocol) + ADD_IID(Unknown) + ADD_RAW_IID(wxIID_IInternetProtocolRoot) + ADD_RAW_IID(wxIID_IInternetProtocol) +END_IID_TABLE; -ULONG VirtualProtocol::AddRef() -{ - m_refCount++; - return m_refCount; -} - -HRESULT VirtualProtocol::QueryInterface(REFIID riid, void **ppvObject) -{ - if(riid == IID_IUnknown || riid == wxIID_IInternetProtocolRoot || - riid == wxIID_IInternetProtocol) - { - *ppvObject = (wxIInternetProtocol*)this; - AddRef(); - return S_OK; - } - else - { - *ppvObject = NULL; - return E_POINTER; - } -} - -ULONG VirtualProtocol::Release() -{ - m_refCount--; - if (m_refCount > 0) - { - return m_refCount; - } - else - { - delete this; - return 0; - } -} +IMPLEMENT_IUNKNOWN_METHODS(VirtualProtocol) HRESULT VirtualProtocol::Start(LPCWSTR szUrl, wxIInternetProtocolSink *pOIProtSink, wxIInternetBindInfo *pOIBindInfo, DWORD grfPI, @@ -1162,6 +1129,13 @@ HRESULT VirtualProtocol::Read(void *pv, ULONG cb, ULONG *pcbRead) } } +BEGIN_IID_TABLE(ClassFactory) + ADD_IID(Unknown) + ADD_IID(ClassFactory) +END_IID_TABLE; + +IMPLEMENT_IUNKNOWN_METHODS(ClassFactory) + HRESULT ClassFactory::CreateInstance(IUnknown* pUnkOuter, REFIID riid, void ** ppvObject) { @@ -1181,41 +1155,4 @@ STDMETHODIMP ClassFactory::LockServer(BOOL fLock) return S_OK; } -ULONG ClassFactory::AddRef(void) -{ - m_refCount++; - return m_refCount; -} - -HRESULT ClassFactory::QueryInterface(REFIID riid, void **ppvObject) -{ - if ((riid == IID_IUnknown) || (riid == IID_IClassFactory)) - { - *ppvObject = this; - AddRef(); - return S_OK; - } - else - { - *ppvObject = NULL; - return E_POINTER; - } - -} - -ULONG ClassFactory::Release(void) -{ - m_refCount--; - if (m_refCount > 0) - { - return m_refCount; - } - else - { - delete this; - return 0; - } - -} - #endif // wxUSE_WEBVIEW && wxUSE_WEBVIEW_IE