// Create Instance functions #ifndef _SCCLS_H_ #define _SCCLS_H_ // // global object array - used for class factory, auto registration, type libraries, oc information // typedef struct tagOBJECTINFO { #ifdef __cplusplus void *cf; #else const IClassFactoryVtbl *cf; #endif CLSID const* pclsid; HRESULT (*pfnCreateInstance)(IUnknown* pUnkOuter, IUnknown** ppunk, const struct tagOBJECTINFO *); // for OCs and automation objects: IID const* piid; IID const* piidEvents; long lVersion; DWORD dwOleMiscFlags; DWORD dwClassFactFlags; } OBJECTINFO; typedef OBJECTINFO const * LPCOBJECTINFO; #define OIF_ALLOWAGGREGATION 0x0001 #define VERSION_2 2 // so we don't get confused by too many integers #define VERSION_1 1 #define VERSION_0 0 #define COCREATEONLY NULL,NULL,VERSION_0,0,0 // piid,piidEvents,lVersion,dwOleMiscFlags,dwClassFactFlags #define COCREATEONLY_NOFLAGS NULL,NULL,VERSION_0,0 // piid,piidEvents,lVersion,dwOleMiscFlags STDAPI CShellAppManager_CreateInstance(IUnknown* pUnkOuter, IUnknown** ppunk, LPCOBJECTINFO poi); STDAPI CEnumInstalledApps_CreateInstance(IUnknown* pUnkOuter, IUnknown** ppunk, LPCOBJECTINFO poi); STDAPI CDarwinAppPublisher_CreateInstance(IUnknown* pUnkOuter, IUnknown** ppunk, LPCOBJECTINFO poi); // to save some typing: #define CLSIDOFOBJECT(p) (*((p)->_pObjectInfo->pclsid)) #define VERSIONOFOBJECT(p) ((p)->_pObjectInfo->lVersion) #define EVENTIIDOFCONTROL(p) (*((p)->_pObjectInfo->piidEvents)) #define OLEMISCFLAGSOFCONTROL(p) ((p)->_pObjectInfo->dwOleMiscFlags) extern const OBJECTINFO g_ObjectInfo[]; // sccls.c STDAPI GetClassObject(REFCLSID rclsid, REFIID riid, void **ppv); #endif // _SCCLS_H_