Index: src/chext/ShellExtControl.cpp =================================================================== diff -u -N -rd9527df01ee91b35d9a5fdccb80ded25a9c8265f -r6609ba39811176f4803f0556db3da30e9e457b9d --- src/chext/ShellExtControl.cpp (.../ShellExtControl.cpp) (revision d9527df01ee91b35d9a5fdccb80ded25a9c8265f) +++ src/chext/ShellExtControl.cpp (.../ShellExtControl.cpp) (revision 6609ba39811176f4803f0556db3da30e9e457b9d) @@ -17,17 +17,14 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "stdafx.h" -#include "chext.h" #include #include "ShellExtControl.h" #include "../common/version.h" #include "Logger.h" #include "../libchcore/TIpcMutexLock.h" CShellExtControl::CShellExtControl() : - m_hMemory(nullptr), m_mutex(L"CHShellExtControlDataMutex"), - m_pShellExtData(nullptr), m_spLog(GetLogger(L"ShellExtControl")) { LOG_DEBUG(m_spLog) << L"Constructing CShellExtControl"; @@ -44,6 +41,40 @@ } } +STDMETHODIMP CShellExtControl::QueryInterface(REFIID riid, LPVOID FAR *ppvObject) +{ + if (!ppvObject) + return E_POINTER; + + *ppvObject = nullptr; + + if (IsEqualIID(riid, IID_IUnknown)) + *ppvObject = static_cast(this); + else if (IsEqualIID(riid, IID_IShellExtControl)) + *ppvObject = static_cast(this); + else + return E_NOINTERFACE; + + AddRef(); + return S_OK; +} + +STDMETHODIMP_(ULONG) CShellExtControl::AddRef() +{ + return InterlockedIncrement(&m_ulRefCnt); +} + +STDMETHODIMP_(ULONG) CShellExtControl::Release() +{ + ULONG ulNewValue = InterlockedDecrement(&m_ulRefCnt); + if (ulNewValue) + return ulNewValue; + + delete this; + + return 0UL; +} + STDMETHODIMP CShellExtControl::GetVersion(LONG* plVersion, BSTR* pbstrVersion) { try