|
// ProSysLib.cpp : Implementation of DLL Exports.
#include "stdafx.h"
#include "resource.h"
#include "ProSysLib_i.h"
#include "ProSysModule.h"
#include "dlldatax.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)
{
// registers object, typelib and all interfaces in typelib
HRESULT hr = _Module.DllRegisterServer();
#ifdef _MERGE_PROXYSTUB
if (FAILED(hr))
return hr;
hr = PrxDllRegisterServer();
#endif
return hr;
}
// DllUnregisterServer - Removes entries from the system registry
STDAPI DllUnregisterServer(void)
{
HRESULT hr = _Module.DllUnregisterServer();
#ifdef _MERGE_PROXYSTUB
if (FAILED(hr))
return hr;
hr = PrxDllRegisterServer();
if (FAILED(hr))
return hr;
hr = PrxDllUnregisterServer();
#endif
return hr;
}
// 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;
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.