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
)
26 m_StateToMake
= state
;
30 InterlockedIncrement(&g_cRefThisDll
);
33 CShellExtClassFactory::~CShellExtClassFactory()
35 InterlockedDecrement(&g_cRefThisDll
);
38 STDMETHODIMP
CShellExtClassFactory::QueryInterface(REFIID riid
,
46 // Any interface on this object is the object pointer
48 if (IsEqualIID(riid
, IID_IUnknown
) || IsEqualIID(riid
, IID_IClassFactory
))
50 *ppv
= static_cast<LPCLASSFACTORY
>(this);
58 STDMETHODIMP_(ULONG
) CShellExtClassFactory::AddRef()
63 STDMETHODIMP_(ULONG
) CShellExtClassFactory::Release()
73 STDMETHODIMP
CShellExtClassFactory::CreateInstance(LPUNKNOWN pUnkOuter
,
82 // Shell extensions typically don't support aggregation (inheritance)
85 return CLASS_E_NOAGGREGATION
;
87 // Create the main shell extension object. The shell will then call
88 // QueryInterface with IID_IShellExtInit--this is how shell extensions are
91 CShellExt
* pShellExt
= new (std::nothrow
) CShellExt(m_StateToMake
); //Create the CShellExt object
93 if (NULL
== pShellExt
)
96 const HRESULT hr
= pShellExt
->QueryInterface(riid
, ppvObj
);
102 STDMETHODIMP
CShellExtClassFactory::LockServer(BOOL
/*fLock*/)