Robert Shearman <R.J.Shearman@warwick.ac.uk>
authorGé van Geldorp <ge@gse.nl>
Mon, 12 Jul 2004 22:03:09 +0000 (22:03 +0000)
committerGé van Geldorp <ge@gse.nl>
Mon, 12 Jul 2004 22:03:09 +0000 (22:03 +0000)
- Make ole32 a delay-load import of shell32.
(except that the ReactOS build system doesn't handle delay-load imports
yet, so make it a normal import)

svn path=/trunk/; revision=10100

reactos/lib/shell32/Makefile.in
reactos/lib/shell32/Makefile.ros-template
reactos/lib/shell32/clipboard.c
reactos/lib/shell32/shell32_main.h
reactos/lib/shell32/shellole.c
reactos/lib/shell32/shellord.c
reactos/lib/shell32/shlview.c
reactos/lib/shell32/shv_item_cmenu.c

index 7f2fe60..01b637d 100644 (file)
@@ -4,8 +4,8 @@ TOPOBJDIR = ../..
 SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = shell32.dll
-# fixme: avoid ole32.dll import
-IMPORTS   = ole32 shlwapi comctl32 user32 gdi32 advapi32 kernel32 ntdll
+IMPORTS   = shlwapi comctl32 user32 gdi32 advapi32 kernel32
+DELAYIMPORTS = ole32
 ALTNAMES  = shell.dll
 EXTRALIBS = $(LIBUUID) $(LIBUNICODE)
 
index 4f5efab..7346ce5 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: Makefile.ros-template,v 1.3 2004/05/29 21:24:46 hbirr Exp $
+# $Id: Makefile.ros-template,v 1.4 2004/07/12 22:03:09 gvg Exp $
 
 TARGET_NAME = shell32
 
@@ -6,7 +6,7 @@ TARGET_OBJECTS = @C_SRCS@
 
 TARGET_CFLAGS = @EXTRADEFS@ -D__REACTOS__
 
-TARGET_SDKLIBS = libwine.a @IMPORTS@ wine_uuid.a
+TARGET_SDKLIBS = libwine.a @IMPORTS@ ole32.a wine_uuid.a ntdll.a
 
 TARGET_BASE = $(TARGET_BASE_LIB_SHELL32)
 
index ad1e0bf..71c9293 100644 (file)
 
 WINE_DEFAULT_DEBUG_CHANNEL(shell);
 
-HRESULT (WINAPI *pOleInitialize)(LPVOID reserved);
-void    (WINAPI *pOleUninitialize)(void);
-HRESULT (WINAPI *pRegisterDragDrop)(HWND hwnd, IDropTarget* pDropTarget);
-HRESULT (WINAPI *pRevokeDragDrop)(HWND hwnd);
-HRESULT (WINAPI *pDoDragDrop)(LPDATAOBJECT,LPDROPSOURCE,DWORD,DWORD*);
-void   (WINAPI *pReleaseStgMedium)(STGMEDIUM* pmedium);
-HRESULT (WINAPI *pOleSetClipboard)(IDataObject* pDataObj);
-HRESULT (WINAPI *pOleGetClipboard)(IDataObject** ppDataObj);
-
-/**************************************************************************
- * GetShellOle
- *
- * make sure OLE32.DLL is loaded
- */
-BOOL GetShellOle(void)
-{
-    static HANDLE hOle32 = NULL;
-    if(!hOle32)
-    {
-        hOle32 = LoadLibraryA("ole32.dll");
-        if(hOle32)
-        {
-            pOleInitialize=(void*)GetProcAddress(hOle32,"OleInitialize");
-            pOleUninitialize=(void*)GetProcAddress(hOle32,"OleUninitialize");
-            pRegisterDragDrop=(void*)GetProcAddress(hOle32,"RegisterDragDrop");
-            pRevokeDragDrop=(void*)GetProcAddress(hOle32,"RevokeDragDrop");
-            pDoDragDrop=(void*)GetProcAddress(hOle32,"DoDragDrop");
-            pReleaseStgMedium=(void*)GetProcAddress(hOle32,"ReleaseStgMedium");
-            pOleSetClipboard=(void*)GetProcAddress(hOle32,"OleSetClipboard");
-            pOleGetClipboard=(void*)GetProcAddress(hOle32,"OleGetClipboard");
-
-            pOleInitialize(NULL);
-        }
-    }
-    return TRUE;
-}
-
 /**************************************************************************
  * RenderHDROP
  *
index 6ecdabe..7787fb4 100644 (file)
@@ -130,20 +130,6 @@ HRESULT WINAPI Shell_MergeMenus (HMENU hmDst, HMENU hmSrc, UINT uInsert, UINT uI
 BOOL SYSTRAY_Init(void);
 #endif
 
-/* OLE32 */
-extern HINSTANCE hShellOle32;
-
-extern HRESULT (WINAPI *pOleInitialize)(LPVOID reserved);
-extern void    (WINAPI *pOleUninitialize)(void);
-extern HRESULT (WINAPI *pRegisterDragDrop)(HWND hwnd, IDropTarget* pDropTarget);
-extern HRESULT (WINAPI *pRevokeDragDrop)(HWND hwnd);
-extern HRESULT (WINAPI *pDoDragDrop)(LPDATAOBJECT,LPDROPSOURCE,DWORD,DWORD*);
-extern void    (WINAPI *pReleaseStgMedium)(STGMEDIUM* pmedium);
-extern HRESULT (WINAPI *pOleSetClipboard)(IDataObject* pDataObj);
-extern HRESULT (WINAPI *pOleGetClipboard)(IDataObject** ppDataObj);
-extern HRESULT (WINAPI *pCoCreateInstance)(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv);
-
-BOOL GetShellOle(void);
 
 HGLOBAL RenderHDROP(LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl);
 HGLOBAL RenderSHELLIDLIST (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl);
index ccced91..56acf78 100644 (file)
@@ -71,30 +71,6 @@ struct {
        {NULL,NULL}
 };
 
-/*************************************************************************
- * __CoCreateInstance [internal]
- *
- * NOTES
- *   wraper for late bound call to OLE32.DLL
- *
- */
-HRESULT (WINAPI *pCoCreateInstance)(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv) = NULL;
-
-void * __GetExternalFunc(HMODULE * phModule, LPCWSTR szModuleName, LPCSTR szProcName)
-{
-       if (!*phModule) *phModule = GetModuleHandleW(szModuleName);
-       if (!*phModule) *phModule = LoadLibraryW(szModuleName);
-       if (*phModule) return GetProcAddress(*phModule, szProcName);
-       return NULL;
-}
-
-HRESULT  __CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
-{
-       if(!pCoCreateInstance) pCoCreateInstance = __GetExternalFunc(&hShellOle32, sOLE32, "CoCreateInstance");
-       if(!pCoCreateInstance) return E_FAIL;
-       return pCoCreateInstance(rclsid, pUnkOuter, dwClsContext, iid, ppv);
-}
-
 /*************************************************************************
  * SHCoCreateInstance [SHELL32.102]
  *
@@ -211,7 +187,7 @@ LRESULT WINAPI SHCoCreateInstance(
        } else {
 
            /* load a external dll in the usual way */
-           hres = __CoCreateInstance(myclsid, pUnkOuter, CLSCTX_INPROC_SERVER, refiid, ppv);
+           hres = CoCreateInstance(myclsid, pUnkOuter, CLSCTX_INPROC_SERVER, refiid, ppv);
            goto end;
        }
 
@@ -437,17 +413,18 @@ static ICOM_VTABLE(IMalloc) VT_Shell_IMalloc32 =
  */
 HRESULT WINAPI SHGetMalloc(LPMALLOC *lpmal)
 {
-       HRESULT (WINAPI *pCoGetMalloc)(DWORD,LPMALLOC *);
-       HMODULE hOle32;
-
        TRACE("(%p)\n", lpmal);
 
        if (!ShellTaskAllocator)
        {
-               hOle32 = GetModuleHandleA("OLE32.DLL");
+               HMODULE hOle32 = GetModuleHandleA("OLE32.DLL");
+               /* this is very suspect. we should not being using a different
+                * allocator from deallocator based on something undeterministic
+                * like whether ole32 is loaded. as it happens currently, they
+                * both map to the same allocator deep down, but this could
+                * change in the future. */
                if(hOle32) {
-                       pCoGetMalloc = (void*) GetProcAddress(hOle32, "CoGetMalloc");
-                       if (pCoGetMalloc) pCoGetMalloc(MEMCTX_TASK, &ShellTaskAllocator);
+                       CoGetMalloc(MEMCTX_TASK, &ShellTaskAllocator);
                        TRACE("got ole32 IMalloc\n");
                }
                if(!ShellTaskAllocator) {
index d6521fa..c16b662 100644 (file)
@@ -426,8 +426,7 @@ HRESULT WINAPI SHRegisterDragDrop(
        LPDROPTARGET pDropTarget)
 {
        FIXME("(%p,%p):stub.\n", hWnd, pDropTarget);
-       if (GetShellOle()) return pRegisterDragDrop(hWnd, pDropTarget);
-        return 0;
+       return RegisterDragDrop(hWnd, pDropTarget);
 }
 
 /*************************************************************************
@@ -439,8 +438,7 @@ HRESULT WINAPI SHRegisterDragDrop(
 HRESULT WINAPI SHRevokeDragDrop(HWND hWnd)
 {
     FIXME("(%p):stub.\n",hWnd);
-    if (GetShellOle()) return pRevokeDragDrop(hWnd);
-    return 0;
+    return RevokeDragDrop(hWnd);
 }
 
 /*************************************************************************
@@ -458,8 +456,7 @@ HRESULT WINAPI SHDoDragDrop(
 {
     FIXME("(%p %p %p 0x%08lx %p):stub.\n",
     hWnd, lpDataObject, lpDropSource, dwOKEffect, pdwEffect);
-       if (GetShellOle()) return pDoDragDrop(lpDataObject, lpDropSource, dwOKEffect, pdwEffect);
-        return 0;
+       return DoDragDrop(lpDataObject, lpDropSource, dwOKEffect, pdwEffect);
 }
 
 /*************************************************************************
index adae9a6..ec0ebb2 100644 (file)
@@ -656,13 +656,10 @@ static LRESULT ShellView_OnCreate(IShellViewImpl * This)
          }
        }
 
-       if(GetShellOle() && pRegisterDragDrop)
+       if (SUCCEEDED(IShellFolder_CreateViewObject(This->pSFParent, This->hWnd, &IID_IDropTarget, (LPVOID*)&pdt)))
        {
-         if (SUCCEEDED(IShellFolder_CreateViewObject(This->pSFParent, This->hWnd, &IID_IDropTarget, (LPVOID*)&pdt)))
-         {
-           pRegisterDragDrop(This->hWnd, pdt);
+           RegisterDragDrop(This->hWnd, pdt);
            IDropTarget_Release(pdt);
-         }
        }
 
        /* register for receiving notifications */
@@ -1343,10 +1340,8 @@ static LRESULT ShellView_OnNotify(IShellViewImpl * This, UINT CtlID, LPNMHDR lpn
              DWORD dwAttributes = SFGAO_CANLINK;
              DWORD dwEffect = DROPEFFECT_COPY | DROPEFFECT_MOVE;
 
-             if(GetShellOle() && pDoDragDrop)
+             if (SUCCEEDED(IShellFolder_GetUIObjectOf(This->pSFParent, This->hWnd, This->cidl, (LPCITEMIDLIST*)This->apidl, &IID_IDataObject,0,(LPVOID *)&pda)))
              {
-               if (SUCCEEDED(IShellFolder_GetUIObjectOf(This->pSFParent, This->hWnd, This->cidl, (LPCITEMIDLIST*)This->apidl, &IID_IDataObject,0,(LPVOID *)&pda)))
-               {
                  IDropSource * pds = (IDropSource*)&(This->lpvtblDropSource);  /* own DropSource interface */
 
                  if (SUCCEEDED(IShellFolder_GetAttributesOf(This->pSFParent, This->cidl, (LPCITEMIDLIST*)This->apidl, &dwAttributes)))
@@ -1360,10 +1355,9 @@ static LRESULT ShellView_OnNotify(IShellViewImpl * This, UINT CtlID, LPNMHDR lpn
                  if (pds)
                  {
                    DWORD dwEffect;
-                   pDoDragDrop(pda, pds, dwEffect, &dwEffect);
+                   DoDragDrop(pda, pds, dwEffect, &dwEffect);
                  }
                  IDataObject_Release(pda);
-               }
              }
            }
            break;
@@ -1568,10 +1562,9 @@ static LRESULT CALLBACK ShellView_WndProc(HWND hWnd, UINT uMessage, WPARAM wPara
 
          case WM_GETDLGCODE:   return SendMessageA(pThis->hWndList,uMessage,0,0);
 
-         case WM_DESTROY:      if(GetShellOle() && pRevokeDragDrop)
-                               {
-                                 pRevokeDragDrop(pThis->hWnd);
-                               }
+
+         case WM_DESTROY:      
+                               RevokeDragDrop(pThis->hWnd);
                                SHChangeNotifyDeregister(pThis->hNotify);
                                break;
 
index c5beee9..a9c4cb6 100644 (file)
@@ -366,62 +366,20 @@ static BOOL DoCopyOrCut(
 
        TRACE("(%p)->(wnd=%p,bCut=0x%08x)\n",This, hwnd, bCut);
 
-       if(GetShellOle())
+       /* get the active IShellView */
+       if ((lpSB = (LPSHELLBROWSER)SendMessageA(hwnd, CWM_GETISHELLBROWSER,0,0)))
        {
-         /* get the active IShellView */
-         if ((lpSB = (LPSHELLBROWSER)SendMessageA(hwnd, CWM_GETISHELLBROWSER,0,0)))
+         if (SUCCEEDED(IShellBrowser_QueryActiveShellView(lpSB, &lpSV)))
          {
-           if (SUCCEEDED(IShellBrowser_QueryActiveShellView(lpSB, &lpSV)))
+           if (SUCCEEDED(IShellView_GetItemObject(lpSV, SVGIO_SELECTION, &IID_IDataObject, (LPVOID*)&lpDo)))
            {
-             if (SUCCEEDED(IShellView_GetItemObject(lpSV, SVGIO_SELECTION, &IID_IDataObject, (LPVOID*)&lpDo)))
-             {
-               pOleSetClipboard(lpDo);
-               IDataObject_Release(lpDo);
-             }
-             IShellView_Release(lpSV);
+             OleSetClipboard(lpDo);
+             IDataObject_Release(lpDo);
            }
+           IShellView_Release(lpSV);
          }
        }
        return TRUE;
-#if 0
-/*
-  the following code does the copy operation witout ole32.dll
-  we might need this possibility too (js)
-*/
-       BOOL bSuccess = FALSE;
-
-       TRACE("(%p)\n", iface);
-
-       if(OpenClipboard(NULL))
-       {
-         if(EmptyClipboard())
-         {
-           IPersistFolder2 * ppf2;
-           IShellFolder_QueryInterface(This->pSFParent, &IID_IPersistFolder2, (LPVOID*)&ppf2);
-           if (ppf2)
-           {
-             LPITEMIDLIST pidl;
-             IPersistFolder2_GetCurFolder(ppf2, &pidl);
-             if(pidl)
-             {
-               HGLOBAL hMem;
-
-               hMem = RenderHDROP(pidl, This->apidl, This->cidl);
-
-               if(SetClipboardData(CF_HDROP, hMem))
-               {
-                 bSuccess = TRUE;
-               }
-               SHFree(pidl);
-             }
-             IPersistFolder2_Release(ppf2);
-           }
-
-         }
-         CloseClipboard();
-       }
-       return bSuccess;
-#endif
 }
 /**************************************************************************
 * ISvItemCm_fnInvokeCommand()