//____________________________________________________________________________ // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1995 - 1995. // // File: ole.cxx // // Contents: IUnknown & IClassFactory for all OLE objects // // History: 1/4/1996 RaviR Created // //____________________________________________________________________________ #include "..\pch\headers.hxx" #pragma hdrstop #include "dbg.h" #include "macros.h" #include "guids.h" #include "dll.hxx" #include // Necessary for util.hxx/schedui.hxx inclusion. #include "util.hxx" #include "..\schedui\schedui.hxx" //____________________________________________________________________________ // // Class: CJobFolderCF // // Purpose: Class factory to create CJobFolder. // // History: 1/24/1996 RaviR Created //____________________________________________________________________________ class CJobFolderCF : public IClassFactory { public: // IUnknown methods DECLARE_IUNKNOWN_METHODS; // IClassFactory methods STDMETHOD(CreateInstance)(IUnknown* pUnkOuter, REFIID riid, LPVOID* ppvObj); STDMETHOD(LockServer)(BOOL fLock); }; STDMETHODIMP CJobFolderCF::QueryInterface(REFIID riid, LPVOID* ppvObj) { if (IsEqualIID(IID_IUnknown, riid) || IsEqualIID(IID_IClassFactory, riid)) { *ppvObj = (IUnknown*)(IClassFactory*) this; this->AddRef(); return S_OK; } *ppvObj = NULL; return E_NOINTERFACE; } STDMETHODIMP_(ULONG) CJobFolderCF::AddRef() { return CDll::AddRef(); } STDMETHODIMP_(ULONG) CJobFolderCF::Release() { return CDll::Release(); } STDMETHODIMP CJobFolderCF::CreateInstance(IUnknown* pUnkOuter, REFIID riid, LPVOID* ppvObj) { if (pUnkOuter != NULL) { return E_NOTIMPL; // don't support aggregation } return JFGetJobFolder(riid, ppvObj); } STDMETHODIMP CJobFolderCF::LockServer(BOOL fLock) { CDll::LockServer(fLock); return S_OK; } //____________________________________________________________________________ // // Class: CSchedObjExtCF // // Purpose: Class factory to create CSchedObjExt. // // History: 4/25/1996 RaviR Created //____________________________________________________________________________ class CSchedObjExtCF : public IClassFactory { public: // IUnknown methods DECLARE_IUNKNOWN_METHODS; // IClassFactory methods STDMETHOD(CreateInstance)(IUnknown* pUnkOuter, REFIID riid, LPVOID* ppvObj); STDMETHOD(LockServer)(BOOL fLock); }; STDMETHODIMP CSchedObjExtCF::QueryInterface(REFIID riid, LPVOID* ppvObj) { if (IsEqualIID(IID_IUnknown, riid) || IsEqualIID(IID_IClassFactory, riid)) { *ppvObj = (IUnknown*)(IClassFactory*) this; this->AddRef(); return S_OK; } *ppvObj = NULL; return E_NOINTERFACE; } STDMETHODIMP_(ULONG) CSchedObjExtCF::AddRef() { return CDll::AddRef(); } STDMETHODIMP_(ULONG) CSchedObjExtCF::Release() { return CDll::Release(); } STDMETHODIMP CSchedObjExtCF::CreateInstance(IUnknown* pUnkOuter, REFIID riid, LPVOID* ppvObj) { if (pUnkOuter != NULL) { return E_NOTIMPL; // don't support aggregation } return JFGetSchedObjExt(riid, ppvObj); } STDMETHODIMP CSchedObjExtCF::LockServer(BOOL fLock) { CDll::LockServer(fLock); return S_OK; } ////////////////////////////////////////////////////////////////////////////// JF_IMPLEMENT_CLASSFACTORY(CTaskIconExt); STDMETHODIMP CTaskIconExtCF::CreateInstance(IUnknown* pUnkOuter, REFIID riid, LPVOID* ppvObj) { if (pUnkOuter != NULL) { return E_NOTIMPL; // don't support aggregation } return JFGetTaskIconExt(riid, ppvObj); } ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// CJobFolderCF * pcfJobFolder = NULL; CSchedObjExtCF * pcfSchedObjExt = NULL; CTaskIconExtCF * pcfTaskIconExt = NULL; HRESULT JFGetClassObject( REFCLSID cid, REFIID riid, LPVOID * ppvObj) { CDllRef DllRef; // don't nuke me now! if (IsEqualCLSID(cid, CLSID_CJobFolder)) { if (pcfJobFolder != NULL) { return pcfJobFolder->QueryInterface(riid, ppvObj); } else { return E_FAIL; } } else if (IsEqualCLSID(cid, CLSID_CSchedObjExt)) { if (pcfSchedObjExt != NULL) { return pcfSchedObjExt->QueryInterface(riid, ppvObj); } else { return E_FAIL; } } else if (IsEqualCLSID(cid, CLSID_CTaskIconExt)) { if (pcfTaskIconExt != NULL) { return pcfTaskIconExt->QueryInterface(riid, ppvObj); } else { return E_FAIL; } } return E_NOINTERFACE; } HRESULT AllocFolderCFs(void) { pcfJobFolder = new CJobFolderCF; if (pcfJobFolder == NULL) { return E_OUTOFMEMORY; } pcfSchedObjExt = new CSchedObjExtCF; if (pcfSchedObjExt == NULL) { delete pcfJobFolder; pcfJobFolder = NULL; return E_OUTOFMEMORY; } pcfTaskIconExt = new CTaskIconExtCF; if (pcfTaskIconExt == NULL) { delete pcfJobFolder; pcfJobFolder = NULL; delete pcfSchedObjExt; pcfSchedObjExt = NULL; return E_OUTOFMEMORY; } return S_OK; } void FreeFolderCFs(void) { if (pcfJobFolder != NULL) { delete pcfJobFolder; pcfJobFolder = NULL; } if (pcfSchedObjExt != NULL) { delete pcfSchedObjExt; pcfSchedObjExt = NULL; } if (pcfTaskIconExt != NULL) { delete pcfTaskIconExt; pcfTaskIconExt = NULL; } }