Index: src/chext/DropMenuExt.cpp =================================================================== diff -u -r9ddf8fdd5f641491dd30c49eb90f8f740314b6af -r6609ba39811176f4803f0556db3da30e9e457b9d --- src/chext/DropMenuExt.cpp (.../DropMenuExt.cpp) (revision 9ddf8fdd5f641491dd30c49eb90f8f740314b6af) +++ src/chext/DropMenuExt.cpp (.../DropMenuExt.cpp) (revision 6609ba39811176f4803f0556db3da30e9e457b9d) @@ -17,7 +17,6 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include "stdafx.h" -#include "chext.h" #include "DropMenuExt.h" #include "../Common/ipcstructs.h" #include "../libchengine/TTaskDefinition.h" @@ -48,6 +47,44 @@ } } +STDMETHODIMP CDropMenuExt::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) CDropMenuExt::AddRef() +{ + return InterlockedIncrement(&m_ulRefCnt); +} + +STDMETHODIMP_(ULONG) CDropMenuExt::Release() +{ + ULONG ulNewValue = InterlockedDecrement(&m_ulRefCnt); + if (ulNewValue) + return ulNewValue; + + delete this; + + return 0UL; +} + STDMETHODIMP CDropMenuExt::Initialize(LPCITEMIDLIST pidlFolder, IDataObject* piDataObject, HKEY /*hkeyProgID*/) { try