Index: src/chext/MenuExt.cpp =================================================================== diff -u -N -rd3371a00eafb40afa4251953591ff1004343e1be -r6609ba39811176f4803f0556db3da30e9e457b9d --- src/chext/MenuExt.cpp (.../MenuExt.cpp) (revision d3371a00eafb40afa4251953591ff1004343e1be) +++ src/chext/MenuExt.cpp (.../MenuExt.cpp) (revision 6609ba39811176f4803f0556db3da30e9e457b9d) @@ -17,7 +17,6 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "stdafx.h" -#include "chext.h" #include "MenuExt.h" #include "../common/ipcstructs.h" #include "stdio.h" @@ -49,6 +48,44 @@ } } +STDMETHODIMP CMenuExt::QueryInterface(REFIID riid, LPVOID FAR *ppvObject) +{ + if (!ppvObject) + return E_POINTER; + + *ppvObject = nullptr; + + if (IsEqualIID(riid, IID_IShellExtInit) || IsEqualIID(riid, IID_IUnknown)) + *ppvObject = static_cast(this); + else if (IsEqualIID(riid, IID_IContextMenu)) + *ppvObject = static_cast(this); + else if (IsEqualIID(riid, IID_IContextMenu2)) + *ppvObject = static_cast(this); + else if (IsEqualIID(riid, IID_IContextMenu3)) + *ppvObject = static_cast(this); + else + return E_NOINTERFACE; + + AddRef(); + return S_OK; +} + +STDMETHODIMP_(ULONG) CMenuExt::AddRef() +{ + return InterlockedIncrement(&m_ulRefCnt); +} + +STDMETHODIMP_(ULONG) CMenuExt::Release() +{ + ULONG ulNewValue = InterlockedDecrement(&m_ulRefCnt); + if (ulNewValue) + return ulNewValue; + + delete this; + + return 0UL; +} + STDMETHODIMP CMenuExt::Initialize(LPCITEMIDLIST pidlFolder, IDataObject* piDataObject, HKEY /*hkeyProgID*/) { try