source: trunk/src/avifil32/comentry.c@ 6712

Last change on this file since 6712 was 6712, checked in by sandervl, 24 years ago

restored old version

File size: 3.3 KB
Line 
1/*
2 * Copyright 2001 Hidenori TAKESHIMA <hidenori@a2.ctktv.ne.jp>
3 */
4
5#include <string.h>
6#include <stdio.h>
7#include <assert.h>
8
9#include "winbase.h"
10#include "winnls.h"
11#include "mmsystem.h"
12#include "winerror.h"
13#include "ole2.h"
14#include "vfw.h"
15#include "debugtools.h"
16#include "avifile_private.h"
17
18DEFAULT_DEBUG_CHANNEL(avifile);
19
20static HRESULT WINAPI
21IClassFactory_fnQueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj);
22static ULONG WINAPI IClassFactory_fnAddRef(LPCLASSFACTORY iface);
23static ULONG WINAPI IClassFactory_fnRelease(LPCLASSFACTORY iface);
24static HRESULT WINAPI IClassFactory_fnCreateInstance(LPCLASSFACTORY iface,LPUNKNOWN pOuter,REFIID riid,LPVOID *ppobj);
25static HRESULT WINAPI IClassFactory_fnLockServer(LPCLASSFACTORY iface,BOOL dolock);
26
27static ICOM_VTABLE(IClassFactory) iclassfact =
28{
29 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
30 IClassFactory_fnQueryInterface,
31 IClassFactory_fnAddRef,
32 IClassFactory_fnRelease,
33 IClassFactory_fnCreateInstance,
34 IClassFactory_fnLockServer
35};
36
37typedef struct
38{
39 /* IUnknown fields */
40 ICOM_VFIELD(IClassFactory);
41 DWORD ref;
42} IClassFactoryImpl;
43
44static IClassFactoryImpl AVIFILE_GlobalCF = {&iclassfact, 0 };
45
46
47
48static HRESULT WINAPI
49IClassFactory_fnQueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
50{
51 ICOM_THIS(IClassFactoryImpl,iface);
52
53 TRACE("(%p)->(%p,%p)\n",This,riid,ppobj);
54 if ( ( IsEqualGUID( &IID_IUnknown, riid ) ) ||
55 ( IsEqualGUID( &IID_IClassFactory, riid ) ) )
56 {
57 *ppobj = iface;
58 IClassFactory_AddRef(iface);
59 return S_OK;
60 }
61
62 return E_NOINTERFACE;
63}
64
65static ULONG WINAPI IClassFactory_fnAddRef(LPCLASSFACTORY iface)
66{
67 ICOM_THIS(IClassFactoryImpl,iface);
68
69 TRACE("(%p)->()\n",This);
70 if ( (This->ref) == 0 )
71 AVIFILE_data.dwClassObjRef ++;
72
73 return ++(This->ref);
74}
75
76static ULONG WINAPI IClassFactory_fnRelease(LPCLASSFACTORY iface)
77{
78 ICOM_THIS(IClassFactoryImpl,iface);
79
80 TRACE("(%p)->()\n",This);
81 if ( (--(This->ref)) > 0 )
82 return This->ref;
83
84 AVIFILE_data.dwClassObjRef --;
85 return 0;
86}
87
88static HRESULT WINAPI IClassFactory_fnCreateInstance(LPCLASSFACTORY iface,LPUNKNOWN pOuter,REFIID riid,LPVOID *ppobj)
89{
90 /*ICOM_THIS(IClassFactoryImpl,iface);*/
91
92 *ppobj = NULL;
93 if ( pOuter != NULL )
94 return E_FAIL;
95
96 if ( IsEqualGUID( &IID_IAVIFile, riid ) )
97 return AVIFILE_CreateIAVIFile(ppobj);
98 if ( IsEqualGUID( &IID_IAVIStream, riid ) )
99 return AVIFILE_CreateIAVIStream(ppobj);
100
101 return E_NOINTERFACE;
102}
103
104static HRESULT WINAPI IClassFactory_fnLockServer(LPCLASSFACTORY iface,BOOL dolock)
105{
106 ICOM_THIS(IClassFactoryImpl,iface);
107 HRESULT hr;
108
109 FIXME("(%p)->(%d),stub!\n",This,dolock);
110 if (dolock)
111 hr = IClassFactory_AddRef(iface);
112 else
113 hr = IClassFactory_Release(iface);
114
115 return hr;
116}
117
118
119/***********************************************************************
120 * DllGetClassObject (AVIFIL32.@)
121 */
122HRESULT WINAPI AVIFILE_DllGetClassObject(const CLSID* pclsid,const IID* piid,void** ppv)
123{
124 *ppv = NULL;
125 if ( IsEqualCLSID( &IID_IClassFactory, piid ) )
126 {
127 *ppv = (LPVOID)&AVIFILE_GlobalCF;
128 IClassFactory_AddRef((IClassFactory*)*ppv);
129 return S_OK;
130 }
131
132 return CLASS_E_CLASSNOTAVAILABLE;
133}
134
135/*****************************************************************************
136 * DllCanUnloadNow (AVIFIL32.@)
137 */
138DWORD WINAPI AVIFILE_DllCanUnloadNow(void)
139{
140 return ( AVIFILE_data.dwClassObjRef == 0 ) ? S_OK : S_FALSE;
141}
142
Note: See TracBrowser for help on using the repository browser.