OSDN Git Service

SVNから移行した
[completeeraser/CompleteEraser.git] / ShellExtension / ClassFactory.cpp
1 #include "DllMain.h"\r
2 #include "ClassFactory.h"\r
3 #include "ContextMenu.h"\r
4 \r
5 STDMETHODIMP CClassFactory::QueryInterface(REFIID riid, void **ppvObject)\r
6 {\r
7         *ppvObject = NULL;\r
8 \r
9         if (IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_IClassFactory))\r
10                 *ppvObject = static_cast<IClassFactory *>(this);\r
11         else\r
12                 return E_NOINTERFACE;\r
13 \r
14         AddRef();\r
15         \r
16         return S_OK;\r
17 }\r
18 \r
19 STDMETHODIMP_(ULONG) CClassFactory::AddRef()\r
20 {\r
21         LockModule(TRUE);\r
22 \r
23         return 2;\r
24 }\r
25 \r
26 STDMETHODIMP_(ULONG) CClassFactory::Release()\r
27 {\r
28         LockModule(FALSE);\r
29 \r
30         return 1;\r
31 }\r
32 \r
33 STDMETHODIMP CClassFactory::CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppvObject)\r
34 {\r
35         CContextMenu *p;\r
36         HRESULT      hr;\r
37         \r
38         *ppvObject = NULL;\r
39 \r
40         if (pUnkOuter != NULL)\r
41                 return CLASS_E_NOAGGREGATION;\r
42 \r
43         p = new CContextMenu();\r
44         if (p == NULL)\r
45                 return E_OUTOFMEMORY;\r
46 \r
47         hr = p->QueryInterface(riid, ppvObject);\r
48         p->Release();\r
49 \r
50         return hr;\r
51 }\r
52 \r
53 STDMETHODIMP CClassFactory::LockServer(BOOL fLock)\r
54 {\r
55         LockModule(fLock);\r
56 \r
57         return S_OK;\r
58 }\r
59 \r