- 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
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)
-# $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
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)
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
*
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);
{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]
*
} 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;
}
*/
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) {
LPDROPTARGET pDropTarget)
{
FIXME("(%p,%p):stub.\n", hWnd, pDropTarget);
- if (GetShellOle()) return pRegisterDragDrop(hWnd, pDropTarget);
- return 0;
+ return RegisterDragDrop(hWnd, pDropTarget);
}
/*************************************************************************
HRESULT WINAPI SHRevokeDragDrop(HWND hWnd)
{
FIXME("(%p):stub.\n",hWnd);
- if (GetShellOle()) return pRevokeDragDrop(hWnd);
- return 0;
+ return RevokeDragDrop(hWnd);
}
/*************************************************************************
{
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);
}
/*************************************************************************
}
}
- 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 */
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)))
if (pds)
{
DWORD dwEffect;
- pDoDragDrop(pda, pds, dwEffect, &dwEffect);
+ DoDragDrop(pda, pds, dwEffect, &dwEffect);
}
IDataObject_Release(pda);
- }
}
}
break;
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;
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()