Back

// ProSysLib.cpp : Implementation of DLL Exports.


#include "stdafx.h"
#include "resource.h"
#include "ProSysLib_i.h"
#include "ProSysModule.h"
#include "dlldatax.h"
#include "SmartRegister.h"
#include "PSLSystem.h"

// DLL Entry Point
extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
#ifdef _MERGE_PROXYSTUB
   if (!PrxDllMain(hInstance, dwReason, lpReserved))
      return FALSE;
#endif
   _Module.SetResourceInstance(hInstance);
   BOOL bResult = _Module.DllMain(dwReason, lpReserved);
   switch(dwReason)
   {
   case DLL_PROCESS_ATTACH:
      {
         _Module.OnModuleStart();
         break;
      }
   case DLL_PROCESS_DETACH:
      {
         _Module.OnModuleTerminate();
      }
   case DLL_THREAD_ATTACH:
      {
         break;
      }
   case DLL_THREAD_DETACH:
      {
         break;
      }
   default:
      break;
   }

   return bResult;
}

////////////////////////////////////////////////////
// Creates and returns a new instance of IPSLSystem,
// or NULL, if failed.
extern "C" IPSLSystem * __stdcall CreatePSLSystem()
{
   CComObject<CPSLSystem> * pSystem = NULL;
   if(CComObject<CPSLSystem>::CreateInstance(&pSystem) == S_OK)
   {
      pSystem->AddRef();
      return CComPtr<IPSLSystem>(pSystem);
   }
   return NULL;
}

// Used to determine whether the DLL can be unloaded by OLE
STDAPI DllCanUnloadNow(void)
{
#ifdef _MERGE_PROXYSTUB
    HRESULT hr = PrxDllCanUnloadNow();
    if (hr != S_OK)
        return hr;
#endif
    return _Module.DllCanUnloadNow();
}

// Returns a class factory to create an object of the requested type
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
{
#ifdef _MERGE_PROXYSTUB
    if (PrxDllGetClassObject(rclsid, riid, ppv) == S_OK)
        return S_OK;
#endif
    return _Module.DllGetClassObject(rclsid, riid, ppv);
}

// DllRegisterServer - Adds entries to the system registry
STDAPI DllRegisterServer(void)
{
   CSmartRegister rgs(_T(PSL_ClassID));
   return rgs.Register();
}

STDAPI DllRestoreRegistration(void)
{
   return CSmartRegister::RegisterItself();
}

// DllUnregisterServer - Removes entries from the system registry
STDAPI DllUnregisterServer(void)
{
   CSmartRegister rgs(_T(PSL_ClassID));
   return rgs.Unregister();
}

// DllInstall - Adds/Removes entries to the system registry per user
//              per machine.  
STDAPI DllInstall(BOOL bInstall, LPCWSTR pszCmdLine)
{
    HRESULT hr = E_FAIL;
    static const wchar_t szUserSwitch[] = _T("user");

    if(pszCmdLine)
      if(!_wcsnicmp(pszCmdLine, szUserSwitch, _countof(szUserSwitch)))
         AtlSetPerUserRegistration(true);

    if(bInstall)
    {
      hr = DllRegisterServer();
      if (FAILED(hr))
         DllUnregisterServer();
    }
    else
      hr = DllUnregisterServer();

    return hr;
}

Top