5 const IClassFactoryVtbl
*lpVtbl
;
8 LPFNCREATEINSTANCE lpfnCI
;
16 IClassFactory_fnQueryInterface(
21 IClassFactoryImpl
*This
= (IClassFactoryImpl
*)iface
;
24 if(IsEqualIID(riid
, &IID_IUnknown
) || IsEqualIID(riid
, &IID_IClassFactory
))
27 InterlockedIncrement(&This
->ref
);
36 IClassFactory_fnAddRef(
39 IClassFactoryImpl
*This
= (IClassFactoryImpl
*)iface
;
40 ULONG refCount
= InterlockedIncrement(&This
->ref
);
48 IClassFactory_fnRelease(
51 IClassFactoryImpl
*This
= (IClassFactoryImpl
*)iface
;
52 ULONG refCount
= InterlockedDecrement(&This
->ref
);
65 IClassFactory_fnCreateInstance(
71 IClassFactoryImpl
*This
= (IClassFactoryImpl
*)iface
;
75 if ( This
->riidInst
==NULL
|| IsEqualCLSID(riid
, This
->riidInst
) || IsEqualCLSID(riid
, &IID_IUnknown
) )
77 return This
->lpfnCI(pUnkOuter
, riid
, ppvObject
);
85 WINAPI
IClassFactory_fnLockServer(
89 //IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
94 static const IClassFactoryVtbl dclfvt
=
96 IClassFactory_fnQueryInterface
,
97 IClassFactory_fnAddRef
,
98 IClassFactory_fnRelease
,
99 IClassFactory_fnCreateInstance
,
100 IClassFactory_fnLockServer
105 IClassFactory_fnConstructor(
106 LPFNCREATEINSTANCE lpfnCI
,
110 IClassFactoryImpl
* lpclf
;
112 lpclf
= CoTaskMemAlloc(sizeof(IClassFactoryImpl
));
114 lpclf
->lpVtbl
= &dclfvt
;
115 lpclf
->lpfnCI
= lpfnCI
;
118 InterlockedIncrement(pcRefDll
);
119 lpclf
->riidInst
= riidInst
;
121 return (LPCLASSFACTORY
)lpclf
;