1 // TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2003-2006, 2009-2011 - TortoiseSVN
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License
7 // as published by the Free Software Foundation; either version 2
8 // of the License, or (at your option) any later version.
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software Foundation,
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 #include "ShellExtClassFactory.h"
24 CShellExtClassFactory::CShellExtClassFactory(FileState state
)
25 : m_StateToMake(state
)
28 InterlockedIncrement(&g_cRefThisDll
);
31 CShellExtClassFactory::~CShellExtClassFactory()
33 InterlockedDecrement(&g_cRefThisDll
);
36 STDMETHODIMP
CShellExtClassFactory::QueryInterface(REFIID riid
,
44 // Any interface on this object is the object pointer
46 if (IsEqualIID(riid
, IID_IUnknown
) || IsEqualIID(riid
, IID_IClassFactory
))
48 *ppv
= static_cast<LPCLASSFACTORY
>(this);
56 STDMETHODIMP_(ULONG
) CShellExtClassFactory::AddRef()
58 return InterlockedIncrement(&m_cRef
);
61 STDMETHODIMP_(ULONG
) CShellExtClassFactory::Release()
63 if (InterlockedDecrement(&m_cRef
))
71 STDMETHODIMP
CShellExtClassFactory::CreateInstance(LPUNKNOWN pUnkOuter
,
80 // Shell extensions typically don't support aggregation (inheritance)
83 return CLASS_E_NOAGGREGATION
;
85 // Create the main shell extension object. The shell will then call
86 // QueryInterface with IID_IShellExtInit--this is how shell extensions are
89 CShellExt
* pShellExt
= new (std::nothrow
) CShellExt(m_StateToMake
); //Create the CShellExt object
94 const HRESULT hr
= pShellExt
->QueryInterface(riid
, ppvObj
);
100 STDMETHODIMP
CShellExtClassFactory::LockServer(BOOL
/*fLock*/)