Removed a few dependencies on kernel32 functions.
[wine] / dlls / dplayx / dpclassfactory.c
1
2 #include "wine/obj_base.h"
3 #include "winerror.h"
4 #include "debugtools.h"
5 #include "dpinit.h"
6
7 DEFAULT_DEBUG_CHANNEL(dplay)
8
9
10 /*******************************************************************************
11  * DirectPlayLobby ClassFactory
12  */
13
14 typedef struct
15 {
16     /* IUnknown fields */
17     ICOM_VFIELD(IClassFactory);
18     DWORD                       ref;
19 } IClassFactoryImpl;
20
21 static HRESULT WINAPI
22 DP_and_DPL_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
23         ICOM_THIS(IClassFactoryImpl,iface);
24
25         FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
26
27         return E_NOINTERFACE;
28 }
29
30 static ULONG WINAPI
31 DP_and_DPL_AddRef(LPCLASSFACTORY iface) {
32         ICOM_THIS(IClassFactoryImpl,iface);
33         return ++(This->ref);
34 }
35
36 static ULONG WINAPI DP_and_DPL_Release(LPCLASSFACTORY iface) {
37         ICOM_THIS(IClassFactoryImpl,iface);
38         /* static class (reference starts @ 1), won't ever be freed */
39         return --(This->ref);
40 }
41
42 static HRESULT WINAPI DP_and_DPL_CreateInstance(
43         LPCLASSFACTORY iface,LPUNKNOWN pOuter,REFIID riid,LPVOID *ppobj
44 ) {
45         ICOM_THIS(IClassFactoryImpl,iface);
46
47         TRACE("(%p)->(%p,%s,%p)\n",This,pOuter,debugstr_guid(riid),ppobj);
48
49         if ( DPL_CreateInterface( riid, ppobj ) == S_OK )
50         {
51            return S_OK;
52         }
53         else if ( DP_CreateInterface( riid, ppobj ) == S_OK )
54         {
55            return S_OK;
56         }
57
58         return E_NOINTERFACE;
59 }
60
61 static HRESULT WINAPI DP_and_DPL_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
62         ICOM_THIS(IClassFactoryImpl,iface);
63         FIXME("(%p)->(%d),stub!\n",This,dolock);
64         return S_OK;
65 }
66
67 static ICOM_VTABLE(IClassFactory) DP_and_DPL_Vtbl = {
68         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
69         DP_and_DPL_QueryInterface,
70         DP_and_DPL_AddRef,
71         DP_and_DPL_Release,
72         DP_and_DPL_CreateInstance,
73         DP_and_DPL_LockServer
74 };
75
76 static IClassFactoryImpl DP_and_DPL_CF = {&DP_and_DPL_Vtbl, 1 };
77
78
79 /*******************************************************************************
80  * DPLAYX_DllGetClassObject [DPLAYX.?]
81  * Retrieves DP or DPL class object from a DLL object
82  *
83  * NOTES
84  *    Docs say returns STDAPI
85  *
86  * PARAMS
87  *    rclsid [I] CLSID for the class object
88  *    riid   [I] Reference to identifier of interface for class object
89  *    ppv    [O] Address of variable to receive interface pointer for riid
90  *
91  * RETURNS
92  *    Success: S_OK
93  *    Failure: CLASS_E_CLASSNOTAVAILABLE, E_OUTOFMEMORY, E_INVALIDARG,
94  *             E_UNEXPECTED
95  */
96 DWORD WINAPI DPLAYX_DllGetClassObject(REFCLSID rclsid,REFIID riid,LPVOID *ppv)
97 {
98     TRACE("(%p,%p,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
99
100     if ( IsEqualCLSID( riid, &IID_IClassFactory ) )
101     {
102         *ppv = (LPVOID)&DP_and_DPL_CF;
103         IClassFactory_AddRef( (IClassFactory*)*ppv );
104
105         return S_OK;
106     }
107
108     ERR("(%p,%p,%p): no interface found.\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
109     return CLASS_E_CLASSNOTAVAILABLE;
110 }