/*****************************************************************************\ * MODULE: dllmain.cpp * * PURPOSE: Implementation of COM interface for BidiSpooler * * Copyright (C) 2000 Microsoft Corporation * * History: * * 03/07/00 Weihai Chen (weihaic) Created * \*****************************************************************************/ #include "precomp.h" #include "priv.h" extern "C" { #ifdef DEBUG MODULE_DEBUG_INIT( DBG_ERROR | DBG_WARNING | DBG_TRACE | DBG_INFO , DBG_ERROR ); #else MODULE_DEBUG_INIT( DBG_ERROR , DBG_ERROR ); #endif } /////////////////////////////////////////////////////////// // // Global variables // static HMODULE g_hModule = NULL ; // DLL module handle const TCHAR g_szFriendlyName[] = _T ("Bidi Spooler APIs") ; const TCHAR g_szRequestVerIndProgID[] = _T ("bidispl.bidirequest") ; const TCHAR g_szRequestProgID[] = _T ("bidispl.bidirequest.1") ; const TCHAR g_szContainerVerIndProgID[] = _T ("bidispl.bidirequestcontainer") ; const TCHAR g_szContainerProgID[] = _T ("bidispl.bidirequestcontainer.1") ; const TCHAR g_szSplVerIndProgID[] = _T ("bidispl.bidispl") ; const TCHAR g_szSplProgID[] = _T ("bidispl.bidispl.1") ; /////////////////////////////////////////////////////////// // // Exported functions // // // Can DLL unload now? // STDAPI DllCanUnloadNow() { if ((g_cComponents == 0) && (g_cServerLocks == 0)) { return S_OK ; } else { return S_FALSE ; } } // // Get class factory // STDAPI DllGetClassObject(REFCLSID clsid, REFIID iid, PVOID * ppv) { DBGMSG(DBG_TRACE,("Enter DllGetClassObject\n")); // Can we create this component? if (clsid != CLSID_BidiRequest && clsid != CLSID_BidiRequestContainer && clsid != CLSID_BidiSpl) { return CLASS_E_CLASSNOTAVAILABLE ; } // Create class factory. TFactory* pFactory = new TFactory (clsid) ; // Reference count set to 1 // in constructor if (pFactory == NULL) { return E_OUTOFMEMORY ; } // Get requested interface. HRESULT hr = pFactory->QueryInterface(iid, ppv) ; pFactory->Release() ; return hr ; } // // Server registration // STDAPI DllRegisterServer() { BOOL bRet; TComRegistry ComReg; bRet = ComReg.RegisterServer(g_hModule, CLSID_BidiRequest, g_szFriendlyName, g_szRequestProgID, g_szRequestProgID) && ComReg.RegisterServer (g_hModule, CLSID_BidiRequestContainer, g_szFriendlyName, g_szContainerVerIndProgID, g_szContainerProgID) && ComReg.RegisterServer(g_hModule, CLSID_BidiSpl, g_szFriendlyName, g_szSplVerIndProgID, g_szSplProgID); return bRet; } // // Server unregistration // STDAPI DllUnregisterServer() { TComRegistry ComReg; return ComReg.UnregisterServer(CLSID_BidiRequest, g_szRequestVerIndProgID, g_szRequestProgID) && ComReg.UnregisterServer(CLSID_BidiRequestContainer, g_szContainerVerIndProgID, g_szContainerProgID) && ComReg.UnregisterServer(CLSID_BidiSpl, g_szSplVerIndProgID, g_szSplProgID); } /////////////////////////////////////////////////////////// // // DLL module information // BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, void* lpReserved) { if (dwReason == DLL_PROCESS_ATTACH) { g_hModule = hModule ; //if( !bSplLibInit( NULL )){ // // DBGMSG( DBG_WARN, // ( "DllEntryPoint: Failed to init SplLib %d\n", GetLastError())); //} } return TRUE ; }