Kiln » TortoiseHg » TortoiseHg
Clone URL:  
Pushed to one repository · View In Graph Contained in 2.1.2 and tip

stable shellext: use CSimpleUnknown for class factory

Changeset 904b4dfce252

Parent 6f32582eec57

by David Golub

Changes to 2 files · Browse files at 904b4dfce252 Showing diff from parent 6f32582eec57 Diff from another changeset...

 
37
38
39
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
41
42
 
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
@@ -37,6 +37,20 @@
  return CSimpleUnknown::Release(); \   }   +#define INLINE_UNKNOWN() \ + STDMETHODIMP QueryInterface(REFIID riid, LPVOID FAR* ppv) \ + { \ + return CSimpleUnknown::QueryInterface(riid, ppv); \ + } \ + STDMETHODIMP_(ULONG) AddRef() \ + { \ + return CSimpleUnknown::AddRef(); \ + } \ + STDMETHODIMP_(ULONG) Release() \ + { \ + return CSimpleUnknown::Release(); \ + } +  #define ADDIFACE(iface) \   AddInterface(IID_##iface, (iface*)this)  
 
2
3
4
5
 
6
7
8
 
9
10
11
12
13
 
15
16
17
18
 
19
20
21
 
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
 
62
63
64
 
2
3
4
 
5
6
7
 
8
9
 
10
11
12
 
14
15
16
 
17
18
19
20
 
23
24
25
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
27
28
29
@@ -2,12 +2,11 @@
 #define _ThgClassFactory_h_    #include "ShellExt.h" - +#include "SimpleUnknown.h"    template <class T> -class ThgClassFactory: public IClassFactory +class ThgClassFactory: public CSimpleUnknown, public IClassFactory  { - ULONG m_cRef;   const char myclassToMake;    public: @@ -15,7 +14,7 @@
  myclassToMake(classToMake)   {   CShellExt::IncDllRef(); - m_cRef = 0L; + ADDIFACE(IClassFactory);   }     @@ -24,41 +23,7 @@
  CShellExt::DecDllRef();   }   - - STDMETHODIMP QueryInterface( - REFIID riid, LPVOID FAR* ppv) - { - if (ppv == 0) - return E_POINTER; - - *ppv = NULL; - - if (IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_IClassFactory)) - { - *ppv = (LPCLASSFACTORY) this; - AddRef(); - return S_OK; - } - - return E_NOINTERFACE; - } - - - STDMETHODIMP_(ULONG) AddRef() - { - return ::InterlockedIncrement(&m_cRef); - } - - - STDMETHODIMP_(ULONG) Release() - { - if (::InterlockedDecrement(&m_cRef)) - return m_cRef; - - delete this; - return 0L; - } - + INLINE_UNKNOWN()     STDMETHODIMP CreateInstance(   LPUNKNOWN pUnkOuter, REFIID riid, LPVOID* ppvObj)