reactos/dll/shellext/stobject/stobject.cpp
David Quintana 7292674928 [STOBJECT]
* Fix DllMain not being called when building with gcc. Apparently msvc makes DllMain extern "C" even if you didn't ask for it, unlike gcc.
* Simplify some code.

svn path=/branches/shell-experiments/; revision=63791
2014-07-31 12:36:40 +00:00

76 lines
1.6 KiB
C++

/*
* PROJECT: ReactOS system libraries
* LICENSE: GPL - See COPYING in the top level directory
* FILE: dll\win32\stobject\stobject.cpp
* PURPOSE: COM registration services for STobject.dll
* PROGRAMMERS: Robert Naumann
David Quintana <gigaherz@gmail.com>
*/
#include "precomp.h"
#include <olectl.h>
#include <atlwin.h>
WINE_DEFAULT_DEBUG_CHANNEL(stobject);
BEGIN_OBJECT_MAP(ObjectMap)
OBJECT_ENTRY(CLSID_SysTray, CSysTray)
END_OBJECT_MAP()
HINSTANCE g_hInstance;
CComModule g_Module;
void *operator new (size_t, void *buf)
{
return buf;
}
STDAPI_(BOOL)
DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID fImpLoad)
{
if (fdwReason == DLL_PROCESS_ATTACH)
{
g_hInstance = hinstDLL;
DisableThreadLibraryCalls(g_hInstance);
/* HACK - the global constructors don't run, so I placement new them here */
new (&g_Module) CComModule;
new (&_AtlWinModule) CAtlWinModule;
new (&_AtlBaseModule) CAtlBaseModule;
new (&_AtlComModule) CAtlComModule;
g_Module.Init(ObjectMap, g_hInstance, NULL);
}
else if (fdwReason == DLL_PROCESS_DETACH)
{
g_hInstance = NULL;
g_Module.Term();
}
return TRUE;
}
STDAPI
DllRegisterServer(void)
{
return g_Module.DllRegisterServer(FALSE);
}
STDAPI
DllUnregisterServer(void)
{
return g_Module.DllUnregisterServer(FALSE);
}
STDAPI
DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
{
return g_Module.DllGetClassObject(rclsid, riid, ppv);
}
STDAPI
DllCanUnloadNow(void)
{
return g_Module.DllCanUnloadNow();
}