// -------------------------------------------------------------------------------- // Factory.cpp // Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved // Steven J. Bailey // -------------------------------------------------------------------------------- #include "pch.hxx" #include "dllmain.h" #include "factory.h" #include #include #include #include #include #include #include // -------------------------------------------------------------------------------- // Global Object Info Table // -------------------------------------------------------------------------------- static CClassFactory g_rgFactory[] = { CClassFactory(&CLSID_COE4Import, 0, (PFCREATEINSTANCE)COE4Import_CreateInstance), CClassFactory(&CLSID_CIMN1Import, 0, (PFCREATEINSTANCE)COE4Import_CreateInstance), CClassFactory(&CLSID_CAthena16Import, 0, (PFCREATEINSTANCE)CAthena16Import_CreateInstance), CClassFactory(&CLSID_CEudoraImport, 0, (PFCREATEINSTANCE)CEudoraImport_CreateInstance), CClassFactory(&CLSID_CExchImport, 0, (PFCREATEINSTANCE)CExchImport_CreateInstance), CClassFactory(&CLSID_CNetscapeImport, 0, (PFCREATEINSTANCE)CNetscapeImport_CreateInstance), CClassFactory(&CLSID_CCommunicatorImport, 0, (PFCREATEINSTANCE)CCommunicatorImport_CreateInstance), }; // -------------------------------------------------------------------------------- // 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; iQueryInterface(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; } //#ifdef DEAD HRESULT CAthena16Import_CreateInstance(IUnknown* pUnkOuter, IUnknown** ppUnknown) { // Invalid Arg Assert(ppUnknown); // Initialize *ppUnknown = NULL; // Create me CAthena16Import *pNew = new CAthena16Import; if (NULL == pNew) return TrapError(E_OUTOFMEMORY); // Cast to unknown *ppUnknown = SAFECAST(pNew, IMailImport *); // Done return S_OK; } //#endif // DEAD HRESULT CEudoraImport_CreateInstance(IUnknown* pUnkOuter, IUnknown** ppUnknown) { // Invalid Arg Assert(ppUnknown); // Initialize *ppUnknown = NULL; // Create me CEudoraImport *pNew = new CEudoraImport; if (NULL == pNew) return TrapError(E_OUTOFMEMORY); // Cast to unknown *ppUnknown = SAFECAST(pNew, IMailImport *); // Done return S_OK; } HRESULT CExchImport_CreateInstance(IUnknown* pUnkOuter, IUnknown** ppUnknown) { // Invalid Arg Assert(ppUnknown); // Initialize *ppUnknown = NULL; // Create me CExchImport *pNew = new CExchImport; if (NULL == pNew) return TrapError(E_OUTOFMEMORY); // Cast to unknown *ppUnknown = SAFECAST(pNew, IMailImport *); // Done return S_OK; } HRESULT CNetscapeImport_CreateInstance(IUnknown* pUnkOuter, IUnknown** ppUnknown) { // Invalid Arg Assert(ppUnknown); // Initialize *ppUnknown = NULL; // Create me CNetscapeImport *pNew = new CNetscapeImport; if (NULL == pNew) return TrapError(E_OUTOFMEMORY); // Cast to unknown *ppUnknown = SAFECAST(pNew, IMailImport *); // Done return S_OK; } HRESULT CCommunicatorImport_CreateInstance(IUnknown* pUnkOuter, IUnknown** ppUnknown) { // Invalid Arg Assert(ppUnknown); // Initialize *ppUnknown = NULL; // Create me CCommunicatorImport *pNew = new CCommunicatorImport; if (NULL == pNew) return TrapError(E_OUTOFMEMORY); // Cast to unknown *ppUnknown = SAFECAST(pNew, IMailImport *); // Done return S_OK; }