2 * Copyright 2001 Hidenori TAKESHIMA <hidenori@a2.ctktv.ne.jp>
15 #include "debugtools.h"
16 #include "avifile_private.h"
18 DEFAULT_DEBUG_CHANNEL(avifile);
21 IClassFactory_fnQueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj);
22 static ULONG WINAPI IClassFactory_fnAddRef(LPCLASSFACTORY iface);
23 static ULONG WINAPI IClassFactory_fnRelease(LPCLASSFACTORY iface);
24 static HRESULT WINAPI IClassFactory_fnCreateInstance(LPCLASSFACTORY iface,LPUNKNOWN pOuter,REFIID riid,LPVOID *ppobj);
25 static HRESULT WINAPI IClassFactory_fnLockServer(LPCLASSFACTORY iface,BOOL dolock);
27 static ICOM_VTABLE(IClassFactory) iclassfact =
29 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
30 IClassFactory_fnQueryInterface,
31 IClassFactory_fnAddRef,
32 IClassFactory_fnRelease,
33 IClassFactory_fnCreateInstance,
34 IClassFactory_fnLockServer
40 ICOM_VFIELD(IClassFactory);
44 static IClassFactoryImpl AVIFILE_GlobalCF = {&iclassfact, 0 };
49 IClassFactory_fnQueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
51 ICOM_THIS(IClassFactoryImpl,iface);
53 TRACE("(%p)->(%p,%p)\n",This,riid,ppobj);
54 if ( ( IsEqualGUID( &IID_IUnknown, riid ) ) ||
55 ( IsEqualGUID( &IID_IClassFactory, riid ) ) )
58 IClassFactory_AddRef(iface);
65 static ULONG WINAPI IClassFactory_fnAddRef(LPCLASSFACTORY iface)
67 ICOM_THIS(IClassFactoryImpl,iface);
69 TRACE("(%p)->()\n",This);
70 if ( (This->ref) == 0 )
71 AVIFILE_data.dwClassObjRef ++;
76 static ULONG WINAPI IClassFactory_fnRelease(LPCLASSFACTORY iface)
78 ICOM_THIS(IClassFactoryImpl,iface);
80 TRACE("(%p)->()\n",This);
81 if ( (--(This->ref)) > 0 )
84 AVIFILE_data.dwClassObjRef --;
88 static HRESULT WINAPI IClassFactory_fnCreateInstance(LPCLASSFACTORY iface,LPUNKNOWN pOuter,REFIID riid,LPVOID *ppobj)
90 /*ICOM_THIS(IClassFactoryImpl,iface);*/
96 if ( IsEqualGUID( &IID_IAVIFile, riid ) )
97 return AVIFILE_CreateIAVIFile(ppobj);
98 if ( IsEqualGUID( &IID_IAVIStream, riid ) )
99 return AVIFILE_CreateIAVIStream(ppobj);
101 return E_NOINTERFACE;
104 static HRESULT WINAPI IClassFactory_fnLockServer(LPCLASSFACTORY iface,BOOL dolock)
106 ICOM_THIS(IClassFactoryImpl,iface);
109 FIXME("(%p)->(%d),stub!\n",This,dolock);
111 hr = IClassFactory_AddRef(iface);
113 hr = IClassFactory_Release(iface);
119 /***********************************************************************
120 * DllGetClassObject (AVIFIL32.@)
122 HRESULT WINAPI AVIFILE_DllGetClassObject(const CLSID* pclsid,const IID* piid,void** ppv)
125 if ( IsEqualCLSID( &IID_IClassFactory, piid ) )
127 *ppv = (LPVOID)&AVIFILE_GlobalCF;
128 IClassFactory_AddRef((IClassFactory*)*ppv);
132 return CLASS_E_CLASSNOTAVAILABLE;
135 /*****************************************************************************
136 * DllCanUnloadNow (AVIFIL32.@)
138 DWORD WINAPI AVIFILE_DllCanUnloadNow(void)
140 return ( AVIFILE_data.dwClassObjRef == 0 ) ? S_OK : S_FALSE;