// -------------------------------------------------------------------------------- // Factory.cpp // Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved // Steven J. Bailey // -------------------------------------------------------------------------------- #include "pch.hxx" #include #include #include #include "dllmain.h" #include "factory.h" #include #include "acctman.h" #include #include #include #include #include #include #include "navnews.h" #include // Netscape Communicator - Mail Account Import #include // Netscape Communicator - News Account Import #include // Forte Agent - News Account Import #include // News Express - News Account Import #include #include "hotwizui.h" // -------------------------------------------------------------------------------- // Pretty // -------------------------------------------------------------------------------- #define OBJTYPE0 0 #define OBJTYPE1 OIF_ALLOWAGGREGATION // -------------------------------------------------------------------------------- // Global Object Info Table // -------------------------------------------------------------------------------- static CClassFactory g_rgFactory[] = { CClassFactory(&CLSID_ImnAccountManager, OBJTYPE0, (PFCREATEINSTANCE)IImnAccountManager_CreateInstance), CClassFactory(&CLSID_ApprenticeAcctMgr, OBJTYPE0, (PFCREATEINSTANCE)IICWApprentice_CreateInstance), CClassFactory(&CLSID_CEudoraAcctImport, OBJTYPE0, (PFCREATEINSTANCE)CEudoraAcctImport_CreateInstance), CClassFactory(&CLSID_CNscpAcctImport, OBJTYPE0, (PFCREATEINSTANCE)CNscpAcctImport_CreateInstance), CClassFactory(&CLSID_CCommAcctImport, OBJTYPE0, (PFCREATEINSTANCE)CCommAcctImport_CreateInstance), CClassFactory(&CLSID_CMAPIAcctImport, OBJTYPE0, (PFCREATEINSTANCE)CMAPIAcctImport_CreateInstance), CClassFactory(&CLSID_CCommNewsAcctImport, OBJTYPE0, (PFCREATEINSTANCE)CCommNewsAcctImport_CreateInstance), // Netscape Communicator CClassFactory(&CLSID_CNavNewsAcctImport, OBJTYPE0, (PFCREATEINSTANCE)CNavNewsAcctImport_CreateInstance), // Netscape Navigator CClassFactory(&CLSID_CAgentAcctImport, OBJTYPE0, (PFCREATEINSTANCE)CCAgentAcctImport_CreateInstance), // Forte Agent CClassFactory(&CLSID_CNExpressAcctImport, OBJTYPE0, (PFCREATEINSTANCE)CNExpressAcctImport_CreateInstance), // News Express CClassFactory(&CLSID_OEHotMailWizard, OBJTYPE0, (PFCREATEINSTANCE)CHotMailWizard_CreateInstance) // HoTMaiL Wizard }; // -------------------------------------------------------------------------------- // DllGetClassObject // -------------------------------------------------------------------------------- STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) { // Locals HRESULT hr=S_OK; ULONG i; // Bad param if (ppv == NULL) { hr = TrapError(E_INVALIDARG); goto exit; } // No memory allocator if (NULL == g_pMalloc) { hr = TrapError(E_OUTOFMEMORY); goto exit; } // Find Object Class for (i=0; iAddRef(); // Return pObject::IUnknown *ppvObj = (LPVOID)pObject; } // Otherwise else { // Get the interface requested from pObj CHECKHR(hr = pObject->QueryInterface(riid, ppvObj)); } exit: // Cleanup SafeRelease(pObject); // Done Assert(FAILED(hr) ? NULL == *ppvObj : TRUE); return hr; } // -------------------------------------------------------------------------------- // CClassFactory::LockServer // -------------------------------------------------------------------------------- STDMETHODIMP CClassFactory::LockServer(BOOL fLock) { if (fLock) InterlockedIncrement(&g_cLock); else InterlockedDecrement(&g_cLock); return NOERROR; } // -------------------------------------------------------------------------------- // IImnAccountManager_CreateInstance // -------------------------------------------------------------------------------- HRESULT APIENTRY IImnAccountManager_CreateInstance(IUnknown* pUnkOuter, IUnknown** ppUnknown) { // Invalid Arg Assert(ppUnknown); // Initialize *ppUnknown = NULL; // Create me CAccountManager *pNew; HrCreateAccountManager((IImnAccountManager **)&pNew); if (NULL == pNew) return TrapError(E_OUTOFMEMORY); // Cast to unknown *ppUnknown = SAFECAST(pNew, IImnAccountManager *); // Done return S_OK; } // -------------------------------------------------------------------------------- // IICWApprentice_CreateInstance // -------------------------------------------------------------------------------- HRESULT APIENTRY IICWApprentice_CreateInstance(IUnknown* pUnkOuter, IUnknown** ppUnknown) { // Invalid Arg Assert(ppUnknown); // Initialize *ppUnknown = NULL; // Create me CICWApprentice *pNew = new CICWApprentice(); if (NULL == pNew) return TrapError(E_OUTOFMEMORY); // Cast to unknown *ppUnknown = SAFECAST(pNew, IICWApprentice *); // Done return S_OK; } HRESULT APIENTRY CEudoraAcctImport_CreateInstance(IUnknown* pUnkOuter, IUnknown** ppUnknown) { // Invalid Arg Assert(ppUnknown); // Initialize *ppUnknown = NULL; // Create me CEudoraAcctImport *pNew = new CEudoraAcctImport(); if (NULL == pNew) return TrapError(E_OUTOFMEMORY); // Cast to unknown *ppUnknown = SAFECAST(pNew, IAccountImport *); // Done return S_OK; } HRESULT APIENTRY CNscpAcctImport_CreateInstance(IUnknown* pUnkOuter, IUnknown** ppUnknown) { // Invalid Arg Assert(ppUnknown); // Initialize *ppUnknown = NULL; // Create me CNscpAcctImport *pNew = new CNscpAcctImport(); if (NULL == pNew) return TrapError(E_OUTOFMEMORY); // Cast to unknown *ppUnknown = SAFECAST(pNew, IAccountImport *); // Done return S_OK; } HRESULT APIENTRY CCommAcctImport_CreateInstance(IUnknown* pUnkOuter, IUnknown** ppUnknown) { // Invalid Arg Assert(ppUnknown); // Initialize *ppUnknown = NULL; // Create me CCommAcctImport *pNew = new CCommAcctImport(); if (NULL == pNew) return TrapError(E_OUTOFMEMORY); // Cast to unknown *ppUnknown = SAFECAST(pNew, IAccountImport *); // Done return S_OK; } HRESULT APIENTRY CMAPIAcctImport_CreateInstance(IUnknown* pUnkOuter, IUnknown** ppUnknown) { // Invalid Arg Assert(ppUnknown); // Initialize *ppUnknown = NULL; // Create me CMAPIAcctImport *pNew = new CMAPIAcctImport(); if (NULL == pNew) return TrapError(E_OUTOFMEMORY); // Cast to unknown *ppUnknown = SAFECAST(pNew, IAccountImport *); // Done return S_OK; } HRESULT APIENTRY CCommNewsAcctImport_CreateInstance(IUnknown* pUnkOuter, IUnknown** ppUnknown) { // Invalid Arg Assert(ppUnknown); // Initialize *ppUnknown = NULL; // Create me CCommNewsAcctImport *pNew = new CCommNewsAcctImport(); if (NULL == pNew) return TrapError(E_OUTOFMEMORY); // Cast to unknown *ppUnknown = SAFECAST(pNew, IAccountImport *); // Done return S_OK; } HRESULT APIENTRY CNavNewsAcctImport_CreateInstance(IUnknown* pUnkOuter, IUnknown** ppUnknown) { // Invalid Arg Assert(ppUnknown); // Initialize *ppUnknown = NULL; // Create me CNavNewsAcctImport *pNew = new CNavNewsAcctImport(); if (NULL == pNew) return TrapError(E_OUTOFMEMORY); // Cast to unknown *ppUnknown = SAFECAST(pNew, IAccountImport *); // Done return S_OK; } HRESULT APIENTRY CCAgentAcctImport_CreateInstance(IUnknown* pUnkOuter, IUnknown** ppUnknown) { // Invalid Arg Assert(ppUnknown); // Initialize *ppUnknown = NULL; // Create me CAgentAcctImport *pNew = new CAgentAcctImport(); if (NULL == pNew) return TrapError(E_OUTOFMEMORY); // Cast to unknown *ppUnknown = SAFECAST(pNew, IAccountImport *); // Done return S_OK; } HRESULT APIENTRY CNExpressAcctImport_CreateInstance(IUnknown* pUnkOuter, IUnknown** ppUnknown) { // Invalid Arg Assert(ppUnknown); // Initialize *ppUnknown = NULL; // Create me CNExpressAcctImport *pNew = new CNExpressAcctImport(); if (NULL == pNew) return TrapError(E_OUTOFMEMORY); // Cast to unknown *ppUnknown = SAFECAST(pNew, IAccountImport *); // Done return S_OK; } // -------------------------------------------------------------------------------- // CHotMailWizard_CreateInstance // -------------------------------------------------------------------------------- HRESULT APIENTRY CHotMailWizard_CreateInstance(IUnknown* pUnkOuter, IUnknown** ppUnknown) { // Invalid Arg Assert(ppUnknown); // Initialize *ppUnknown = NULL; // Create me CHotMailWizard *pNew; pNew = new CHotMailWizard(); if (NULL == pNew) return TrapError(E_OUTOFMEMORY); // Cast to unknown *ppUnknown = SAFECAST(pNew, IHotWizard *); // Done return S_OK; }