ReactOS 0.4.17-dev-806-gffa4164
factory.c File Reference
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "wingdi.h"
#include "winuser.h"
#include "winerror.h"
#include "ole2.h"
#include "rpcproxy.h"
#include "initguid.h"
#include "vfw.h"
#include "avifile_private.h"
#include "wine/debug.h"
Include dependency graph for factory.c:

Go to the source code of this file.

Classes

struct  IClassFactoryImpl
 

Macros

#define COBJMACROS
 
#define SLASH(w)   ((w) == '/' || (w) == '\\')
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (avifile)
 
static IClassFactoryImplimpl_from_IClassFactory (IClassFactory *iface)
 
static HRESULT WINAPI IClassFactory_fnQueryInterface (IClassFactory *iface, REFIID riid, void **ppobj)
 
static ULONG WINAPI IClassFactory_fnAddRef (IClassFactory *iface)
 
static ULONG WINAPI IClassFactory_fnRelease (IClassFactory *iface)
 
static HRESULT WINAPI IClassFactory_fnCreateInstance (IClassFactory *iface, IUnknown *pOuter, REFIID riid, void **ppobj)
 
static HRESULT WINAPI IClassFactory_fnLockServer (IClassFactory *iface, BOOL dolock)
 
static HRESULT AVIFILE_CreateClassFactory (const CLSID *clsid, const IID *riid, void **ppv)
 
LPCWSTR AVIFILE_BasenameW (LPCWSTR szPath)
 
HRESULT WINAPI DllGetClassObject (REFCLSID pclsid, REFIID piid, LPVOID *ppv)
 
BOOL WINAPI DllMain (HINSTANCE hInstDll, DWORD fdwReason, LPVOID lpvReserved)
 

Variables

HMODULE AVIFILE_hModule = NULL
 
static const IClassFactoryVtbl iclassfact
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 21 of file factory.c.

◆ SLASH

#define SLASH (   w)    ((w) == '/' || (w) == '\\')

Function Documentation

◆ AVIFILE_BasenameW()

LPCWSTR AVIFILE_BasenameW ( LPCWSTR  szPath)

Definition at line 157 of file factory.c.

158{
159#define SLASH(w) ((w) == '/' || (w) == '\\')
160
161 LPCWSTR szCur;
162
163 for (szCur = szPath + lstrlenW(szPath);
164 szCur > szPath && !SLASH(*szCur) && *szCur != ':';)
165 szCur--;
166
167 if (szCur == szPath)
168 return szCur;
169 else
170 return szCur + 1;
171
172#undef SLASH
173}
#define SLASH(w)
#define lstrlenW
Definition: compat.h:750
LPCWSTR szPath
Definition: env.c:37
const uint16_t * LPCWSTR
Definition: typedefs.h:57

Referenced by AVIFILE_LoadFile(), and IPersistFile_fnLoad().

◆ AVIFILE_CreateClassFactory()

static HRESULT AVIFILE_CreateClassFactory ( const CLSID clsid,
const IID riid,
void **  ppv 
)
static

Definition at line 136 of file factory.c.

137{
139 HRESULT hr;
140
141 *ppv = NULL;
142
143 cf = malloc(sizeof(*cf));
144 if (!cf)
145 return E_OUTOFMEMORY;
146
148 cf->ref = 1;
149 cf->clsid = *clsid;
150
151 hr = IClassFactory_QueryInterface(&cf->IClassFactory_iface, riid, ppv);
152 IClassFactory_Release(&cf->IClassFactory_iface);
153
154 return hr;
155}
static const IClassFactoryVtbl iclassfact
Definition: factory.c:128
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define malloc
Definition: debug_ros.c:4
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
const CLSID * clsid
Definition: msctf.cpp:50
IClassFactory IClassFactory_iface
Definition: inetcomm_main.c:69

Referenced by DllGetClassObject().

◆ DllGetClassObject()

HRESULT WINAPI DllGetClassObject ( REFCLSID  pclsid,
REFIID  piid,
LPVOID ppv 
)

Definition at line 178 of file factory.c.

179{
180 HRESULT hr;
181
182 TRACE("(%s,%s,%p)\n", debugstr_guid(pclsid), debugstr_guid(piid), ppv);
183
184 if (pclsid == NULL || piid == NULL || ppv == NULL)
185 return E_FAIL;
186
187 hr = AVIFILE_CreateClassFactory(pclsid,piid,ppv);
188 if (SUCCEEDED(hr))
189 return hr;
190
191 return avifil32_DllGetClassObject(pclsid,piid,ppv);
192}
static HRESULT AVIFILE_CreateClassFactory(const CLSID *clsid, const IID *riid, void **ppv)
Definition: factory.c:136
HRESULT WINAPI avifil32_DllGetClassObject(REFCLSID pclsid, REFIID piid, LPVOID *ppv)
#define E_FAIL
Definition: ddrawi.h:102
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define debugstr_guid
Definition: kernel32.h:35
#define TRACE(s)
Definition: solgame.cpp:4

◆ DllMain()

BOOL WINAPI DllMain ( HINSTANCE  hInstDll,
DWORD  fdwReason,
LPVOID  lpvReserved 
)

Definition at line 197 of file factory.c.

198{
199 TRACE("(%p,%ld,%p)\n", hInstDll, fdwReason, lpvReserved);
200
201 switch (fdwReason) {
204 AVIFILE_hModule = hInstDll;
205 break;
206 };
207
208 return TRUE;
209}
static DWORD const fdwReason
HMODULE AVIFILE_hModule
Definition: factory.c:39
#define TRUE
Definition: types.h:120
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85
static IN DWORD IN LPVOID lpvReserved

◆ IClassFactory_fnAddRef()

static ULONG WINAPI IClassFactory_fnAddRef ( IClassFactory iface)
static

Definition at line 68 of file factory.c.

69{
72
73 TRACE("(%p) ref = %lu\n", This, ref);
74 return ref;
75}
#define InterlockedIncrement
Definition: armddk.h:53
static IClassFactoryImpl * impl_from_IClassFactory(IClassFactory *iface)
Definition: factory.c:48
Definition: send.c:48
uint32_t ULONG
Definition: typedefs.h:59

◆ IClassFactory_fnCreateInstance()

static HRESULT WINAPI IClassFactory_fnCreateInstance ( IClassFactory iface,
IUnknown pOuter,
REFIID  riid,
void **  ppobj 
)
static

Definition at line 90 of file factory.c.

92{
94
95 TRACE("(%p,%p,%s,%p)\n", iface, pOuter, debugstr_guid(riid),
96 ppobj);
97
98 if (!ppobj)
99 return E_INVALIDARG;
100 *ppobj = NULL;
101
102 if (pOuter && !IsEqualGUID(&IID_IUnknown, riid))
103 return E_INVALIDARG;
104
105 if (IsEqualGUID(&CLSID_AVIFile, &This->clsid))
106 return AVIFILE_CreateAVIFile(pOuter, riid, ppobj);
107 if (IsEqualGUID(&CLSID_WAVFile, &This->clsid))
108 return AVIFILE_CreateWAVFile(pOuter, riid, ppobj);
109
110 if (pOuter)
112
113 if (IsEqualGUID(&CLSID_ICMStream, &This->clsid))
114 return AVIFILE_CreateICMStream(riid,ppobj);
115 if (IsEqualGUID(&CLSID_ACMStream, &This->clsid))
116 return AVIFILE_CreateACMStream(riid,ppobj);
117
118 return E_NOINTERFACE;
119}
HRESULT AVIFILE_CreateACMStream(REFIID riid, LPVOID *ppv)
Definition: acmstream.c:698
HRESULT AVIFILE_CreateAVIFile(IUnknown *pUnkOuter, REFIID riid, void **ppv)
Definition: avifile.c:644
HRESULT AVIFILE_CreateWAVFile(IUnknown *outer_unk, REFIID riid, void **ret_iface)
Definition: wavfile.c:978
HRESULT AVIFILE_CreateICMStream(REFIID riid, LPVOID *ppobj)
Definition: icmstream.c:727
const GUID IID_IUnknown
#define E_INVALIDARG
Definition: ddrawi.h:101
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define E_NOINTERFACE
Definition: winerror.h:3479
#define CLASS_E_NOAGGREGATION
Definition: winerror.h:3771

◆ IClassFactory_fnLockServer()

static HRESULT WINAPI IClassFactory_fnLockServer ( IClassFactory iface,
BOOL  dolock 
)
static

Definition at line 121 of file factory.c.

122{
123 TRACE("(%p,%d)\n",iface,dolock);
124
125 return S_OK;
126}
#define S_OK
Definition: intsafe.h:52

◆ IClassFactory_fnQueryInterface()

static HRESULT WINAPI IClassFactory_fnQueryInterface ( IClassFactory iface,
REFIID  riid,
void **  ppobj 
)
static

Definition at line 53 of file factory.c.

55{
56 TRACE("(%p,%s,%p)\n", iface, debugstr_guid(riid), ppobj);
57
58 if ((IsEqualGUID(&IID_IUnknown, riid)) ||
60 *ppobj = iface;
61 IClassFactory_AddRef(iface);
62 return S_OK;
63 }
64
65 return E_NOINTERFACE;
66}
const GUID IID_IClassFactory

◆ IClassFactory_fnRelease()

static ULONG WINAPI IClassFactory_fnRelease ( IClassFactory iface)
static

Definition at line 77 of file factory.c.

78{
81
82 TRACE("(%p) ref = %lu\n", This, ref);
83
84 if(!ref)
85 free(This);
86
87 return ref;
88}
#define InterlockedDecrement
Definition: armddk.h:52
#define free
Definition: debug_ros.c:5

◆ impl_from_IClassFactory()

static IClassFactoryImpl * impl_from_IClassFactory ( IClassFactory iface)
inlinestatic

Definition at line 48 of file factory.c.

49{
50 return CONTAINING_RECORD(iface, IClassFactoryImpl, IClassFactory_iface);
51}
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Referenced by IClassFactory_fnAddRef(), IClassFactory_fnCreateInstance(), IClassFactory_fnRelease(), MSTASK_IClassFactory_QueryInterface(), OBJSEL_IClassFactory_AddRef(), and OBJSEL_IClassFactory_Release().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( avifile  )

Variable Documentation

◆ AVIFILE_hModule

◆ iclassfact

const IClassFactoryVtbl iclassfact
static
Initial value:
= {
}
static ULONG WINAPI IClassFactory_fnRelease(IClassFactory *iface)
Definition: factory.c:77
static ULONG WINAPI IClassFactory_fnAddRef(IClassFactory *iface)
Definition: factory.c:68
static HRESULT WINAPI IClassFactory_fnQueryInterface(IClassFactory *iface, REFIID riid, void **ppobj)
Definition: factory.c:53
static HRESULT WINAPI IClassFactory_fnLockServer(IClassFactory *iface, BOOL dolock)
Definition: factory.c:121
static HRESULT WINAPI IClassFactory_fnCreateInstance(IClassFactory *iface, IUnknown *pOuter, REFIID riid, void **ppobj)
Definition: factory.c:90

Definition at line 128 of file factory.c.

Referenced by AVIFILE_CreateClassFactory().