Documentation fixes.
[wine] / dlls / quartz / main.c
1 #include "config.h"
2
3 #include "windef.h"
4 #include "winerror.h"
5 #include "ole2.h"
6 #include "guiddef.h"
7 /*#include "dshow.h"*/ /* not yet */
8
9 #include "debugtools.h"
10
11 DEFAULT_DEBUG_CHANNEL(quartz);
12
13 static HRESULT WINAPI
14 IClassFactory_fnQueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj);
15 static ULONG WINAPI IClassFactory_fnAddRef(LPCLASSFACTORY iface);
16 static ULONG WINAPI IClassFactory_fnRelease(LPCLASSFACTORY iface);
17 static HRESULT WINAPI IClassFactory_fnCreateInstance(LPCLASSFACTORY iface,LPUNKNOWN pOuter,REFIID riid,LPVOID *ppobj);
18 static HRESULT WINAPI IClassFactory_fnLockServer(LPCLASSFACTORY iface,BOOL dolock);
19
20 static ICOM_VTABLE(IClassFactory) iclassfact =
21 {
22         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
23         IClassFactory_fnQueryInterface,
24         IClassFactory_fnAddRef,
25         IClassFactory_fnRelease,
26         IClassFactory_fnCreateInstance,
27         IClassFactory_fnLockServer
28 };
29
30 typedef struct
31 {
32         /* IUnknown fields */
33         ICOM_VFIELD(IClassFactory);
34         DWORD   ref;
35 } IClassFactoryImpl;
36
37 static IClassFactoryImpl QUARTZ_GlobalCF = {&iclassfact, 0 };
38
39 static DWORD dwClassObjRef;
40
41
42 static HRESULT WINAPI
43 IClassFactory_fnQueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
44 {
45         ICOM_THIS(IClassFactoryImpl,iface);
46
47         TRACE("(%p)->(%p,%p)\n",This,riid,ppobj);
48         if ( ( IsEqualGUID( &IID_IUnknown, riid ) ) ||
49              ( IsEqualGUID( &IID_IClassFactory, riid ) ) )
50         {
51                 *ppobj = iface;
52                 IClassFactory_AddRef(iface);
53                 return S_OK;
54         }
55
56         return E_NOINTERFACE;
57 }
58
59 static ULONG WINAPI IClassFactory_fnAddRef(LPCLASSFACTORY iface)
60 {
61         ICOM_THIS(IClassFactoryImpl,iface);
62
63         TRACE("(%p)->()\n",This);
64         if ( (This->ref) == 0 )
65                 dwClassObjRef ++;
66
67         return ++(This->ref);
68 }
69
70 static ULONG WINAPI IClassFactory_fnRelease(LPCLASSFACTORY iface)
71 {
72         ICOM_THIS(IClassFactoryImpl,iface);
73
74         TRACE("(%p)->()\n",This);
75         if ( (--(This->ref)) > 0 )
76                 return This->ref;
77
78         dwClassObjRef --;
79         return 0;
80 }
81
82 static HRESULT WINAPI IClassFactory_fnCreateInstance(LPCLASSFACTORY iface,LPUNKNOWN pOuter,REFIID riid,LPVOID *ppobj)
83 {
84         ICOM_THIS(IClassFactoryImpl,iface);
85
86         FIXME("(%p)->(%p,%s,%p),stub!\n",This,pOuter,debugstr_guid(riid),ppobj);
87
88         *ppobj = NULL;
89         if ( pOuter != NULL )
90                 return E_FAIL;
91
92         return E_NOINTERFACE;
93 }
94
95 static HRESULT WINAPI IClassFactory_fnLockServer(LPCLASSFACTORY iface,BOOL dolock)
96 {
97         ICOM_THIS(IClassFactoryImpl,iface);
98         HRESULT hr;
99
100         FIXME("(%p)->(%d),stub!\n",This,dolock);
101         if (dolock)
102                 hr = IClassFactory_AddRef(iface);
103         else
104                 hr = IClassFactory_Release(iface);
105
106         return hr;
107 }
108
109
110
111
112 /***********************************************************************
113  *              QUARTZ_InitProcess (internal)
114  */
115 static BOOL QUARTZ_InitProcess( void )
116 {
117         TRACE("()\n");
118
119         dwClassObjRef = 0;
120
121         return TRUE;
122 }
123
124 /***********************************************************************
125  *              QUARTZ_UninitProcess (internal)
126  */
127 static void QUARTZ_UninitProcess( void )
128 {
129         TRACE("()\n");
130
131         if ( dwClassObjRef != 0 )
132                 ERR( "you must release some objects allocated from quartz.\n" );
133 }
134
135 /***********************************************************************
136  *              QUARTZ_DllMain
137  */
138 BOOL WINAPI QUARTZ_DllMain(
139         HINSTANCE hInstDLL,
140         DWORD fdwReason,
141         LPVOID lpvReserved )
142 {
143         switch ( fdwReason )
144         {
145         case DLL_PROCESS_ATTACH:
146                 if ( !QUARTZ_InitProcess() )
147                         return FALSE;
148                 break;
149         case DLL_PROCESS_DETACH:
150                 QUARTZ_UninitProcess();
151                 break;
152         case DLL_THREAD_ATTACH:
153                 break;
154         case DLL_THREAD_DETACH:
155                 break;
156         }
157
158         return TRUE;
159 }
160
161
162 /***********************************************************************
163  *              DllCanUnloadNow (QUARTZ.@)
164  *
165  * RETURNS
166  *    Success: S_OK
167  *    Failure: S_FALSE
168  */
169 DWORD WINAPI QUARTZ_DllCanUnloadNow(void)
170 {
171         return ( dwClassObjRef == 0 ) ? S_OK : S_FALSE;
172 }
173
174 /***********************************************************************
175  *              DllGetClassObject (QUARTZ.@)
176  */
177 DWORD WINAPI QUARTZ_DllGetClassObject(
178                 const CLSID* pclsid,const IID* piid,void** ppv)
179 {
180         *ppv = NULL;
181         if ( IsEqualCLSID( &IID_IClassFactory, piid ) )
182         {
183                 *ppv = (LPVOID)&QUARTZ_GlobalCF;
184                 IClassFactory_AddRef((IClassFactory*)*ppv);
185                 return S_OK;
186         }
187
188         return CLASS_E_CLASSNOTAVAILABLE;
189 }
190
191 /***********************************************************************
192  *              DllRegisterServer (QUARTZ.@)
193  */
194
195 HRESULT WINAPI QUARTZ_DllRegisterServer( void )
196 {
197         FIXME( "(): stub\n" );
198         return E_FAIL;
199 }
200
201 /***********************************************************************
202  *              DllUnregisterServer (QUARTZ.@)
203  */
204
205 HRESULT WINAPI QUARTZ_DllUnregisterServer( void )
206 {
207         FIXME( "(): stub\n" );
208         return E_FAIL;
209 }
210