[SHELL32]
[reactos.git] / reactos / dll / win32 / shell32 / shell32.cpp
index 6a923c8..76c6e33 100644 (file)
@@ -146,13 +146,45 @@ HRESULT WINAPI SHCreateDefClassObject(
     return S_OK;
 }
 
+/**************************************************************************
+ *  CStartMenuDummy
+ */
+class CStartMenuDummy :
+    public CComCoClass<CStartMenuDummy, &CLSID_StartMenu>,
+    public CComObjectRootEx<CComMultiThreadModelNoCS>
+{
+private:
+    CStartMenuDummy();
+    virtual ~CStartMenuDummy();
+
+public:
+    DECLARE_REGISTRY_RESOURCEID(IDR_STARTMENU)
+
+    class _CreatorClass
+    {
+    public:
+        static STDMETHODIMP CreateInstance(void *pv, REFIID riid, LPVOID *ppv)
+        {
+            if (ppv == NULL)
+                return E_POINTER;
+            *ppv = NULL;
+            if (pv != NULL)
+                return CLASS_E_NOAGGREGATION;
+            return CStartMenu_Constructor(riid, ppv);
+        }
+    };
+};
+
+/**************************************************************************
+ *  CShell32Module
+ */
 class CShell32Module : public CComModule
 {
 public:
     void Term()
     {
-        CComCreatorSingleton< ATL::CComObject< CDrivesFolder > >::Term();
-        CComCreatorSingleton< ATL::CComObject< CDesktopFolder > >::Term();
+        CComCreatorCentralInstance< ATL::CComObject< CDrivesFolder > >::Term();
+        CComCreatorCentralInstance< ATL::CComObject< CDesktopFolder > >::Term();
         CComModule::Term();
     }
 };
@@ -164,6 +196,7 @@ BEGIN_OBJECT_MAP(ObjectMap)
     OBJECT_ENTRY(CLSID_ShellDesktop, CDesktopFolder)
     OBJECT_ENTRY(CLSID_ShellItem, CShellItem)
     OBJECT_ENTRY(CLSID_ShellLink, CShellLink)
+    OBJECT_ENTRY(CLSID_Shell, CShell)
     OBJECT_ENTRY(CLSID_DragDropHelper, CDropTargetHelper)
     OBJECT_ENTRY(CLSID_ControlPanel, CControlPanelFolder)
     OBJECT_ENTRY(CLSID_MyDocuments, CMyDocsFolder)
@@ -174,10 +207,12 @@ BEGIN_OBJECT_MAP(ObjectMap)
     OBJECT_ENTRY(CLSID_RecycleBin, CRecycleBin)
     OBJECT_ENTRY(CLSID_OpenWithMenu, COpenWithMenu)
     OBJECT_ENTRY(CLSID_NewMenu, CNewMenu)
-    OBJECT_ENTRY(CLSID_StartMenu, CStartMenu)
-    OBJECT_ENTRY(CLSID_MenuBandSite, CMenuBandSite)
+    OBJECT_ENTRY(CLSID_StartMenu, CStartMenuDummy)
+    OBJECT_ENTRY(CLSID_MenuBandSite, CMenuSite)
     OBJECT_ENTRY(CLSID_MenuBand, CMenuBand)
     OBJECT_ENTRY(CLSID_MenuDeskBar, CMenuDeskBar)
+    OBJECT_ENTRY(CLSID_MergedFolder, CMergedFolder)
+    OBJECT_ENTRY(CLSID_RebarBandSite, CBandSite)
     OBJECT_ENTRY(CLSID_ExeDropHandler, CExeDropHandler)
     OBJECT_ENTRY(CLSID_QueryAssociations, CQueryAssociations)
 END_OBJECT_MAP()
@@ -256,14 +291,8 @@ STDAPI_(BOOL) DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID fImpLoad)
     TRACE("%p 0x%x %p\n", hInstance, dwReason, fImpLoad);
     if (dwReason == DLL_PROCESS_ATTACH)
     {
-        /* HACK - the global constructors don't run, so I placement new them here */
-        new (&gModule) CShell32Module;
-        new (&_AtlWinModule) CAtlWinModule;
-        new (&_AtlBaseModule) CAtlBaseModule;
-        new (&_AtlComModule) CAtlComModule;
-
         shell32_hInstance = hInstance;
-        gModule.Init(ObjectMap, hInstance, NULL);
+        gModule.Init(ObjectMap, hInstance, &LIBID_Shell32);
 
         DisableThreadLibraryCalls (hInstance);