[2/2] shlwapi: Match shlwapi wrappers to MSDN descriptions

Dmitry Timoshkov dmitry at codeweavers.com
Wed Mar 28 01:52:33 CDT 2007


Hello,

now MSDN documents (http://msdn2.microsoft.com/en-us/library/aa965876.aspx)
many shlwapi wrappers, so we can fix the code in Wine to match that description.

Changelog:
    shlwapi: Match shlwapi wrappers to MSDN descriptions, use normal delay
    loading mechanisms like native version does.

---
 dlls/shlwapi/Makefile.in    |    4 +-
 dlls/shlwapi/ordinal.c      |  346 ++++++-------------------------------------
 dlls/shlwapi/path.c         |    2 +-
 dlls/shlwapi/shlwapi.spec   |   11 +-
 dlls/shlwapi/shlwapi_main.c |   20 +---
 dlls/shlwapi/string.c       |   20 +--
 dlls/shlwapi/thread.c       |   23 +---
 7 files changed, 64 insertions(+), 362 deletions(-)

diff --git a/dlls/shlwapi/Makefile.in b/dlls/shlwapi/Makefile.in
index 44c2cdf..d662f47 100644
--- a/dlls/shlwapi/Makefile.in
+++ b/dlls/shlwapi/Makefile.in
@@ -5,8 +5,8 @@ SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = shlwapi.dll
 IMPORTLIB = libshlwapi.$(IMPLIBEXT)
-IMPORTS   = ole32 user32 gdi32 advapi32 kernel32 ntdll
-DELAYIMPORTS = oleaut32
+IMPORTS   = user32 gdi32 advapi32 kernel32 ntdll
+DELAYIMPORTS = oleaut32 ole32 comctl32 comdlg32 mpr mlang urlmon shell32 winmm version
 EXTRALIBS = -luuid
 
 C_SRCS = \
diff --git a/dlls/shlwapi/ordinal.c b/dlls/shlwapi/ordinal.c
index 68b55b3..460c502 100644
--- a/dlls/shlwapi/ordinal.c
+++ b/dlls/shlwapi/ordinal.c
@@ -33,99 +33,30 @@
 
 #include "windef.h"
 #include "winbase.h"
+#include "winreg.h"
+#include "wingdi.h"
 #include "winuser.h"
-#include "winnls.h"
+#include "winver.h"
+#include "winnetwk.h"
+#include "mmsystem.h"
 #include "objbase.h"
-#include "docobj.h"
 #include "exdisp.h"
-#include "shlguid.h"
-#include "wingdi.h"
 #include "shlobj.h"
+#include "shlwapi.h"
 #include "shellapi.h"
 #include "commdlg.h"
 #include "wine/unicode.h"
-#include "winreg.h"
 #include "wine/debug.h"
-#include "shlwapi.h"
 
 
 WINE_DEFAULT_DEBUG_CHANNEL(shell);
 
-/* Get a function pointer from a DLL handle */
-#define GET_FUNC(func, module, name, fail) \
-  do { \
-    if (!func) { \
-      if (!SHLWAPI_h##module && !(SHLWAPI_h##module = LoadLibraryA(#module ".dll"))) return fail; \
-      func = (fn##func)GetProcAddress(SHLWAPI_h##module, name); \
-      if (!func) return fail; \
-    } \
-  } while (0)
-
 /* DLL handles for late bound calls */
 extern HINSTANCE shlwapi_hInstance;
-extern HMODULE SHLWAPI_hshell32;
-extern HMODULE SHLWAPI_hwinmm;
-extern HMODULE SHLWAPI_hcomdlg32;
-extern HMODULE SHLWAPI_hcomctl32;
-extern HMODULE SHLWAPI_hmpr;
-extern HMODULE SHLWAPI_hurlmon;
-extern HMODULE SHLWAPI_hversion;
-
 extern DWORD SHLWAPI_ThreadRef_index;
 
-/* Function pointers for GET_FUNC macro; these need to be global because of gcc bug */
-typedef LPITEMIDLIST (WINAPI *fnpSHBrowseForFolderW)(LPBROWSEINFOW);
-static  fnpSHBrowseForFolderW pSHBrowseForFolderW;
-typedef BOOL    (WINAPI *fnpPlaySoundW)(LPCWSTR, HMODULE, DWORD);
-static  fnpPlaySoundW pPlaySoundW;
-typedef DWORD   (WINAPI *fnpSHGetFileInfoW)(LPCWSTR,DWORD,SHFILEINFOW*,UINT,UINT);
-static  fnpSHGetFileInfoW pSHGetFileInfoW;
-typedef UINT    (WINAPI *fnpDragQueryFileW)(HDROP, UINT, LPWSTR, UINT);
-static  fnpDragQueryFileW pDragQueryFileW;
-typedef BOOL    (WINAPI *fnpSHGetPathFromIDListW)(LPCITEMIDLIST, LPWSTR);
-static  fnpSHGetPathFromIDListW pSHGetPathFromIDListW;
-typedef BOOL    (WINAPI *fnpShellExecuteExW)(LPSHELLEXECUTEINFOW);
-static  fnpShellExecuteExW pShellExecuteExW;
-typedef HICON   (WINAPI *fnpSHFileOperationW)(LPSHFILEOPSTRUCTW);
-static  fnpSHFileOperationW pSHFileOperationW;
-typedef UINT    (WINAPI *fnpExtractIconExW)(LPCWSTR, INT,HICON *,HICON *, UINT);
-static  fnpExtractIconExW pExtractIconExW;
-typedef BOOL    (WINAPI *fnpSHGetNewLinkInfoW)(LPCWSTR, LPCWSTR, LPCWSTR, BOOL*, UINT);
-static  fnpSHGetNewLinkInfoW pSHGetNewLinkInfoW;
-typedef HRESULT (WINAPI *fnpSHDefExtractIconW)(LPCWSTR, int, UINT, HICON*, HICON*, UINT);
-static  fnpSHDefExtractIconW pSHDefExtractIconW;
-typedef HICON   (WINAPI *fnpExtractIconW)(HINSTANCE, LPCWSTR, UINT);
-static  fnpExtractIconW pExtractIconW;
-typedef BOOL    (WINAPI *fnpGetSaveFileNameW)(LPOPENFILENAMEW);
-static  fnpGetSaveFileNameW pGetSaveFileNameW;
-typedef DWORD   (WINAPI *fnpWNetRestoreConnectionW)(HWND, LPWSTR);
-static  fnpWNetRestoreConnectionW pWNetRestoreConnectionW;
-typedef DWORD   (WINAPI *fnpWNetGetLastErrorW)(LPDWORD, LPWSTR, DWORD, LPWSTR, DWORD);
-static  fnpWNetGetLastErrorW pWNetGetLastErrorW;
-typedef BOOL    (WINAPI *fnpPageSetupDlgW)(LPPAGESETUPDLGW);
-static  fnpPageSetupDlgW pPageSetupDlgW;
-typedef BOOL    (WINAPI *fnpPrintDlgW)(LPPRINTDLGW);
-static  fnpPrintDlgW pPrintDlgW;
-typedef BOOL    (WINAPI *fnpGetOpenFileNameW)(LPOPENFILENAMEW);
-static  fnpGetOpenFileNameW pGetOpenFileNameW;
-typedef DWORD   (WINAPI *fnpGetFileVersionInfoSizeW)(LPCWSTR,LPDWORD);
-static  fnpGetFileVersionInfoSizeW pGetFileVersionInfoSizeW;
-typedef BOOL    (WINAPI *fnpGetFileVersionInfoW)(LPCWSTR,DWORD,DWORD,LPVOID);
-static  fnpGetFileVersionInfoW pGetFileVersionInfoW;
-typedef WORD    (WINAPI *fnpVerQueryValueW)(LPVOID,LPCWSTR,LPVOID*,UINT*);
-static  fnpVerQueryValueW pVerQueryValueW;
-typedef BOOL    (WINAPI *fnpCOMCTL32_417)(HDC,INT,INT,UINT,const RECT*,LPCWSTR,UINT,const INT*);
-static  fnpCOMCTL32_417 pCOMCTL32_417;
-typedef HRESULT (WINAPI *fnpDllGetVersion)(DLLVERSIONINFO*);
-static  fnpDllGetVersion pDllGetVersion;
-typedef HRESULT (WINAPI *fnpCreateFormatEnumerator)(UINT,FORMATETC*,IEnumFORMATETC**);
-static fnpCreateFormatEnumerator pCreateFormatEnumerator;
-typedef HRESULT (WINAPI *fnpRegisterFormatEnumerator)(LPBC,IEnumFORMATETC*,DWORD);
-static fnpRegisterFormatEnumerator pRegisterFormatEnumerator;
-
 HRESULT WINAPI IUnknown_QueryService(IUnknown*,REFGUID,REFIID,LPVOID*);
 HRESULT WINAPI SHInvokeCommand(HWND,IShellFolder*,LPCITEMIDLIST,BOOL);
-HRESULT WINAPI CLSIDFromStringWrap(LPCWSTR,CLSID*);
 BOOL    WINAPI SHAboutInfoW(LPWSTR,DWORD);
 
 /*
@@ -460,8 +391,7 @@ HRESULT WINAPI RegisterDefaultAcceptHeaders(LPBC lpBC, IUnknown *lpUnknown)
     format->tymed = -1;
 
     /* Create a clipboard enumerator */
-    GET_FUNC(pCreateFormatEnumerator, urlmon, "CreateFormatEnumerator", E_FAIL);
-    hRet = pCreateFormatEnumerator(dwNumValues, formatList, &pIEnumFormatEtc);
+    hRet = CreateFormatEnumerator(dwNumValues, formatList, &pIEnumFormatEtc);
 
     if (FAILED(hRet) || !pIEnumFormatEtc)
       return hRet;
@@ -496,8 +426,7 @@ HRESULT WINAPI RegisterDefaultAcceptHeaders(LPBC lpBC, IUnknown *lpUnknown)
       hRet = IEnumFORMATETC_Clone(pIEnumFormatEtc, &pClone);
       if (!hRet && pClone)
       {
-        GET_FUNC(pRegisterFormatEnumerator, urlmon, "RegisterFormatEnumerator", E_FAIL);
-        pRegisterFormatEnumerator(lpBC, pClone, 0);
+        RegisterFormatEnumerator(lpBC, pClone, 0);
 
         IEnumFORMATETC_Release(pClone);
       }
@@ -824,32 +753,6 @@ BOOL WINAPI AppendMenuWrapW(HMENU hMenu, UINT flags, UINT id, LPCWSTR str)
 }
 
 /*************************************************************************
- *      @	[SHLWAPI.74]
- *
- * Get the text from a given dialog item.
- *
- * PARAMS
- *  hWnd     [I] Handle of dialog
- *  nItem    [I] Index of item
- *  lpsDest  [O] Buffer for receiving window text
- *  nDestLen [I] Length of buffer.
- *
- * RETURNS
- *  Success: The length of the returned text.
- *  Failure: 0.
- */
-INT WINAPI GetDlgItemTextWrapW(HWND hWnd, INT nItem, LPWSTR lpsDest,INT nDestLen)
-{
-  HWND hItem = GetDlgItem(hWnd, nItem);
-
-  if (hItem)
-    return GetWindowTextW(hItem, lpsDest, nDestLen);
-  if (nDestLen)
-    *lpsDest = (WCHAR)'\0';
-  return 0;
-}
-
-/*************************************************************************
  *      @   [SHLWAPI.138]
  *
  * Set the text of a given dialog item.
@@ -2784,7 +2687,7 @@ BOOL WINAPI GUIDFromStringA(LPCSTR idstr, CLSID *id)
 {
   WCHAR wClsid[40];
   MultiByteToWideChar(CP_ACP, 0, idstr, -1, wClsid, sizeof(wClsid)/sizeof(WCHAR));
-  return SUCCEEDED(CLSIDFromStringWrap(wClsid, id));
+  return SUCCEEDED(CLSIDFromString(wClsid, id));
 }
 
 /*************************************************************************
@@ -2794,7 +2697,7 @@ BOOL WINAPI GUIDFromStringA(LPCSTR idstr, CLSID *id)
  */
 BOOL WINAPI GUIDFromStringW(LPCWSTR idstr, CLSID *id)
 {
-  return SUCCEEDED(CLSIDFromStringWrap(idstr, id));
+    return SUCCEEDED(CLSIDFromString((LPOLESTR)idstr, id));
 }
 
 /*************************************************************************
@@ -2821,13 +2724,21 @@ DWORD WINAPI WhichPlatform(void)
   static DWORD dwState = 0;
   HKEY hKey;
   DWORD dwRet, dwData, dwSize;
+  HMODULE hshell32;
 
   if (dwState)
     return dwState;
 
   /* If shell32 exports DllGetVersion(), the browser is integrated */
-  GET_FUNC(pDllGetVersion, shell32, "DllGetVersion", 1);
-  dwState = pDllGetVersion ? 2 : 1;
+  dwState = 1;
+  hshell32 = LoadLibraryA("shell32.dll");
+  if (hshell32)
+  {
+    FARPROC pDllGetVersion;
+    pDllGetVersion = GetProcAddress(hshell32, "DllGetVersion");
+    dwState = pDllGetVersion ? 2 : 1;
+    FreeLibrary(hshell32);
+  }
 
   /* Set or delete the key accordingly */
   dwRet = RegOpenKeyExA(HKEY_LOCAL_MACHINE,
@@ -3050,8 +2961,7 @@ HRESULT WINAPI IUnknown_CPContainerOnChanged(IUnknown *lpUnknown, DISPID dispID)
  */
 BOOL WINAPI PlaySoundWrapW(LPCWSTR pszSound, HMODULE hmod, DWORD fdwSound)
 {
-  GET_FUNC(pPlaySoundW, winmm, "PlaySoundW", FALSE);
-  return pPlaySoundW(pszSound, hmod, fdwSound);
+    return PlaySoundW(pszSound, hmod, fdwSound);
 }
 
 /*************************************************************************
@@ -3096,18 +3006,6 @@ BOOL WINAPI SHSetIniStringW(LPWSTR str1, LPVOID x, LPWSTR str2, LPWSTR str3)
 }
 
 /*************************************************************************
- *      @	[SHLWAPI.299]
- *
- * See COMCTL32_417.
- */
-BOOL WINAPI ExtTextOutWrapW(HDC hdc, INT x, INT y, UINT flags, const RECT *lprect,
-                         LPCWSTR str, UINT count, const INT *lpDx)
-{
-    GET_FUNC(pCOMCTL32_417, comctl32, (LPCSTR)417, FALSE);
-    return pCOMCTL32_417(hdc, x, y, flags, lprect, str, count, lpDx);
-}
-
-/*************************************************************************
  *      @	[SHLWAPI.313]
  *
  * See SHGetFileInfoW.
@@ -3115,8 +3013,7 @@ BOOL WINAPI ExtTextOutWrapW(HDC hdc, INT x, INT y, UINT flags, const RECT *lprec
 DWORD WINAPI SHGetFileInfoWrapW(LPCWSTR path, DWORD dwFileAttributes,
                          SHFILEINFOW *psfi, UINT sizeofpsfi, UINT flags)
 {
-  GET_FUNC(pSHGetFileInfoW, shell32, "SHGetFileInfoW", 0);
-  return pSHGetFileInfoW(path, dwFileAttributes, psfi, sizeofpsfi, flags);
+    return SHGetFileInfoW(path, dwFileAttributes, psfi, sizeofpsfi, flags);
 }
 
 /*************************************************************************
@@ -3126,8 +3023,7 @@ DWORD WINAPI SHGetFileInfoWrapW(LPCWSTR path, DWORD dwFileAttributes,
  */
 UINT WINAPI DragQueryFileWrapW(HDROP hDrop, UINT lFile, LPWSTR lpszFile, UINT lLength)
 {
-  GET_FUNC(pDragQueryFileW, shell32, "DragQueryFileW", 0);
-  return pDragQueryFileW(hDrop, lFile, lpszFile, lLength);
+    return DragQueryFileW(hDrop, lFile, lpszFile, lLength);
 }
 
 /*************************************************************************
@@ -3137,8 +3033,7 @@ UINT WINAPI DragQueryFileWrapW(HDROP hDrop, UINT lFile, LPWSTR lpszFile, UINT lL
  */
 LPITEMIDLIST WINAPI SHBrowseForFolderWrapW(LPBROWSEINFOW lpBi)
 {
-  GET_FUNC(pSHBrowseForFolderW, shell32, "SHBrowseForFolderW", NULL);
-  return pSHBrowseForFolderW(lpBi);
+    return SHBrowseForFolderW(lpBi);
 }
 
 /*************************************************************************
@@ -3148,8 +3043,7 @@ LPITEMIDLIST WINAPI SHBrowseForFolderWrapW(LPBROWSEINFOW lpBi)
  */
 BOOL WINAPI SHGetPathFromIDListWrapW(LPCITEMIDLIST pidl,LPWSTR pszPath)
 {
-  GET_FUNC(pSHGetPathFromIDListW, shell32, "SHGetPathFromIDListW", 0);
-  return pSHGetPathFromIDListW(pidl, pszPath);
+    return SHGetPathFromIDListW(pidl, pszPath);
 }
 
 /*************************************************************************
@@ -3159,8 +3053,7 @@ BOOL WINAPI SHGetPathFromIDListWrapW(LPCITEMIDLIST pidl,LPWSTR pszPath)
  */
 BOOL WINAPI ShellExecuteExWrapW(LPSHELLEXECUTEINFOW lpExecInfo)
 {
-  GET_FUNC(pShellExecuteExW, shell32, "ShellExecuteExW", FALSE);
-  return pShellExecuteExW(lpExecInfo);
+    return ShellExecuteExW(lpExecInfo);
 }
 
 /*************************************************************************
@@ -3168,31 +3061,9 @@ BOOL WINAPI ShellExecuteExWrapW(LPSHELLEXECUTEINFOW lpExecInfo)
  *
  * See SHFileOperationW.
  */
-HICON WINAPI SHFileOperationWrapW(LPSHFILEOPSTRUCTW lpFileOp)
-{
-  GET_FUNC(pSHFileOperationW, shell32, "SHFileOperationW", 0);
-  return pSHFileOperationW(lpFileOp);
-}
-
-/*************************************************************************
- *      @	[SHLWAPI.337]
- *
- * See ExtractIconExW.
- */
-UINT WINAPI ExtractIconExWrapW(LPCWSTR lpszFile, INT nIconIndex, HICON *phiconLarge,
-                         HICON *phiconSmall, UINT nIcons)
-{
-  GET_FUNC(pExtractIconExW, shell32, "ExtractIconExW", 0);
-  return pExtractIconExW(lpszFile, nIconIndex, phiconLarge, phiconSmall, nIcons);
-}
-
-/*************************************************************************
- *      @	[SHLWAPI.342]
- *
- */
-LONG WINAPI SHInterlockedCompareExchange( PLONG dest, LONG xchg, LONG compare)
+INT WINAPI SHFileOperationWrapW(LPSHFILEOPSTRUCTW lpFileOp)
 {
-        return InterlockedCompareExchange(dest, xchg, compare);
+    return SHFileOperationW(lpFileOp);
 }
 
 /*************************************************************************
@@ -3200,15 +3071,9 @@ LONG WINAPI SHInterlockedCompareExchange( PLONG dest, LONG xchg, LONG compare)
  *
  * See GetFileVersionInfoSizeW.
  */
-DWORD WINAPI GetFileVersionInfoSizeWrapW(
-	LPWSTR x,
-	LPVOID y)
+DWORD WINAPI GetFileVersionInfoSizeWrapW( LPCWSTR filename, LPDWORD handle )
 {
-        DWORD ret;
-
-	GET_FUNC(pGetFileVersionInfoSizeW, version, "GetFileVersionInfoSizeW", 0);
-	ret = pGetFileVersionInfoSizeW(x, y);
-	return 0x208 + ret;
+    return GetFileVersionInfoSizeW( filename, handle );
 }
 
 /*************************************************************************
@@ -3216,14 +3081,10 @@ DWORD WINAPI GetFileVersionInfoSizeWrapW(
  *
  * See GetFileVersionInfoW.
  */
-BOOL  WINAPI GetFileVersionInfoWrapW(
-	LPWSTR w,   /* [in] path to dll */
-	DWORD  x,   /* [in] parm 2 to GetFileVersionInfoA */
-	DWORD  y,   /* [in] return value from SHLWAPI_350() - assume length */
-	LPVOID z)   /* [in/out] buffer (+0x208 sent to GetFileVersionInfoA()) */
+BOOL  WINAPI GetFileVersionInfoWrapW( LPCWSTR filename, DWORD handle,
+                                      DWORD datasize, LPVOID data )
 {
-    GET_FUNC(pGetFileVersionInfoW, version, "GetFileVersionInfoW", 0);
-    return pGetFileVersionInfoW(w, x, y-0x208, (char*)z+0x208);
+    return GetFileVersionInfoW( filename, handle, datasize, data );
 }
 
 /*************************************************************************
@@ -3231,14 +3092,10 @@ BOOL  WINAPI GetFileVersionInfoWrapW(
  *
  * See VerQueryValueW.
  */
-WORD WINAPI VerQueryValueWrapW(
-	LPVOID w,   /* [in] Buffer from SHLWAPI_351() */
-	LPWSTR x,   /* [in]   Value to retrieve - converted and passed to VerQueryValueA() as #2 */
-	LPVOID y,   /* [out]  Ver buffer - passed to VerQueryValueA as #3 */
-	UINT*  z)   /* [in]   Ver length - passed to VerQueryValueA as #4 */
+WORD WINAPI VerQueryValueWrapW( LPVOID pBlock, LPCWSTR lpSubBlock,
+                                LPVOID *lplpBuffer, UINT *puLen )
 {
-    GET_FUNC(pVerQueryValueW, version, "VerQueryValueW", 0);
-    return pVerQueryValueW((char*)w+0x208, x, y, z);
+    return VerQueryValueW( pBlock, lpSubBlock, lplpBuffer, puLen );
 }
 
 #define IsIface(type) SUCCEEDED((hRet = IUnknown_QueryInterface(lpUnknown, &IID_##type, (void**)&lpObj)))
@@ -3302,8 +3159,7 @@ HRESULT WINAPI IUnknown_EnableModeless(IUnknown *lpUnknown, BOOL bModeless)
 BOOL WINAPI SHGetNewLinkInfoWrapW(LPCWSTR pszLinkTo, LPCWSTR pszDir, LPWSTR pszName,
                         BOOL *pfMustCopy, UINT uFlags)
 {
-  GET_FUNC(pSHGetNewLinkInfoW, shell32, "SHGetNewLinkInfoW", FALSE);
-  return pSHGetNewLinkInfoW(pszLinkTo, pszDir, pszName, pfMustCopy, uFlags);
+    return SHGetNewLinkInfoW(pszLinkTo, pszDir, pszName, pfMustCopy, uFlags);
 }
 
 /*************************************************************************
@@ -3314,8 +3170,7 @@ BOOL WINAPI SHGetNewLinkInfoWrapW(LPCWSTR pszLinkTo, LPCWSTR pszDir, LPWSTR pszN
 UINT WINAPI SHDefExtractIconWrapW(LPCWSTR pszIconFile, int iIndex, UINT uFlags, HICON* phiconLarge,
                          HICON* phiconSmall, UINT nIconSize)
 {
-  GET_FUNC(pSHDefExtractIconW, shell32, "SHDefExtractIconW", 0);
-  return pSHDefExtractIconW(pszIconFile, iIndex, uFlags, phiconLarge, phiconSmall, nIconSize);
+    return SHDefExtractIconW(pszIconFile, iIndex, uFlags, phiconLarge, phiconSmall, nIconSize);
 }
 
 /*************************************************************************
@@ -3391,8 +3246,7 @@ HRESULT WINAPI SHInvokeCommand(HWND hWnd, IShellFolder* lpFolder, LPCITEMIDLIST
 HICON WINAPI ExtractIconWrapW(HINSTANCE hInstance, LPCWSTR lpszExeFileName,
                          UINT nIconIndex)
 {
-  GET_FUNC(pExtractIconW, shell32, "ExtractIconW", NULL);
-  return pExtractIconW(hInstance, lpszExeFileName, nIconIndex);
+    return ExtractIconW(hInstance, lpszExeFileName, nIconIndex);
 }
 
 /*************************************************************************
@@ -3509,8 +3363,7 @@ COLORREF WINAPI ColorAdjustLuma(COLORREF cRGB, int dwLuma, BOOL bUnknown)
  */
 BOOL WINAPI GetSaveFileNameWrapW(LPOPENFILENAMEW ofn)
 {
-  GET_FUNC(pGetSaveFileNameW, comdlg32, "GetSaveFileNameW", FALSE);
-  return pGetSaveFileNameW(ofn);
+    return GetSaveFileNameW(ofn);
 }
 
 /*************************************************************************
@@ -3520,8 +3373,7 @@ BOOL WINAPI GetSaveFileNameWrapW(LPOPENFILENAMEW ofn)
  */
 DWORD WINAPI WNetRestoreConnectionWrapW(HWND hwndOwner, LPWSTR lpszDevice)
 {
-  GET_FUNC(pWNetRestoreConnectionW, mpr, "WNetRestoreConnectionW", 0);
-  return pWNetRestoreConnectionW(hwndOwner, lpszDevice);
+    return WNetRestoreConnectionW(hwndOwner, lpszDevice);
 }
 
 /*************************************************************************
@@ -3532,8 +3384,7 @@ DWORD WINAPI WNetRestoreConnectionWrapW(HWND hwndOwner, LPWSTR lpszDevice)
 DWORD WINAPI WNetGetLastErrorWrapW(LPDWORD lpError, LPWSTR lpErrorBuf, DWORD nErrorBufSize,
                          LPWSTR lpNameBuf, DWORD nNameBufSize)
 {
-  GET_FUNC(pWNetGetLastErrorW, mpr, "WNetGetLastErrorW", 0);
-  return pWNetGetLastErrorW(lpError, lpErrorBuf, nErrorBufSize, lpNameBuf, nNameBufSize);
+    return WNetGetLastErrorW(lpError, lpErrorBuf, nErrorBufSize, lpNameBuf, nNameBufSize);
 }
 
 /*************************************************************************
@@ -3543,8 +3394,7 @@ DWORD WINAPI WNetGetLastErrorWrapW(LPDWORD lpError, LPWSTR lpErrorBuf, DWORD nEr
  */
 BOOL WINAPI PageSetupDlgWrapW(LPPAGESETUPDLGW pagedlg)
 {
-  GET_FUNC(pPageSetupDlgW, comdlg32, "PageSetupDlgW", FALSE);
-  return pPageSetupDlgW(pagedlg);
+    return PageSetupDlgW(pagedlg);
 }
 
 /*************************************************************************
@@ -3554,8 +3404,7 @@ BOOL WINAPI PageSetupDlgWrapW(LPPAGESETUPDLGW pagedlg)
  */
 BOOL WINAPI PrintDlgWrapW(LPPRINTDLGW printdlg)
 {
-  GET_FUNC(pPrintDlgW, comdlg32, "PrintDlgW", FALSE);
-  return pPrintDlgW(printdlg);
+    return PrintDlgW(printdlg);
 }
 
 /*************************************************************************
@@ -3565,8 +3414,7 @@ BOOL WINAPI PrintDlgWrapW(LPPRINTDLGW printdlg)
  */
 BOOL WINAPI GetOpenFileNameWrapW(LPOPENFILENAMEW ofn)
 {
-  GET_FUNC(pGetOpenFileNameW, comdlg32, "GetOpenFileNameW", FALSE);
-  return pGetOpenFileNameW(ofn);
+    return GetOpenFileNameW(ofn);
 }
 
 /*************************************************************************
@@ -3761,99 +3609,10 @@ DWORD WINAPI MLClearMLHInstance(DWORD x)
  *
  * RETURNS
  *  S_OK on success or E_INVALIDARG on failure
- *
- * NOTES
- *  This is really CLSIDFromString() which is exported by ole32.dll,
- *  however the native shlwapi.dll does *not* import ole32. Nor does
- *  ole32.dll import this ordinal from shlwapi. Therefore we must conclude
- *  that MS duplicated the code for CLSIDFromString(), and yes they did, only
- *  it returns an E_INVALIDARG error code on failure.
- *  This is a duplicate (with changes for Unicode) of CLSIDFromString16()
- *  in "dlls/ole32/compobj.c".
  */
 HRESULT WINAPI CLSIDFromStringWrap(LPCWSTR idstr, CLSID *id)
 {
-	LPCWSTR s = idstr;
-	BYTE *p;
-	INT i;
-	WCHAR table[256];
-
-	if (!s) {
-	  memset(id, 0, sizeof(CLSID));
-	  return S_OK;
-	}
-	else {  /* validate the CLSID string */
-
-	  if (strlenW(s) != 38)
-	    return E_INVALIDARG;
-
-	  if ((s[0]!=L'{') || (s[9]!=L'-') || (s[14]!=L'-') || (s[19]!=L'-') || (s[24]!=L'-') || (s[37]!=L'}'))
-	    return E_INVALIDARG;
-
-	  for (i=1; i<37; i++)
-	  {
-	    if ((i == 9)||(i == 14)||(i == 19)||(i == 24))
-	      continue;
-	    if (!(((s[i] >= L'0') && (s[i] <= L'9'))  ||
-	        ((s[i] >= L'a') && (s[i] <= L'f'))  ||
-	        ((s[i] >= L'A') && (s[i] <= L'F')))
-	       )
-	      return E_INVALIDARG;
-	  }
-	}
-
-    TRACE("%s -> %p\n", debugstr_w(s), id);
-
-  /* quick lookup table */
-    memset(table, 0, 256*sizeof(WCHAR));
-
-    for (i = 0; i < 10; i++) {
-	table['0' + i] = i;
-    }
-    for (i = 0; i < 6; i++) {
-	table['A' + i] = i+10;
-	table['a' + i] = i+10;
-    }
-
-    /* in form {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} */
-
-    p = (BYTE *) id;
-
-    s++;	/* skip leading brace  */
-    for (i = 0; i < 4; i++) {
-	p[3 - i] = table[*s]<<4 | table[*(s+1)];
-	s += 2;
-    }
-    p += 4;
-    s++;	/* skip - */
-
-    for (i = 0; i < 2; i++) {
-	p[1-i] = table[*s]<<4 | table[*(s+1)];
-	s += 2;
-    }
-    p += 2;
-    s++;	/* skip - */
-
-    for (i = 0; i < 2; i++) {
-	p[1-i] = table[*s]<<4 | table[*(s+1)];
-	s += 2;
-    }
-    p += 2;
-    s++;	/* skip - */
-
-    /* these are just sequential bytes */
-    for (i = 0; i < 2; i++) {
-	*p++ = table[*s]<<4 | table[*(s+1)];
-	s += 2;
-    }
-    s++;	/* skip - */
-
-    for (i = 0; i < 6; i++) {
-	*p++ = table[*s]<<4 | table[*(s+1)];
-	s += 2;
-    }
-
-    return S_OK;
+    return CLSIDFromString((LPOLESTR)idstr, id);
 }
 
 /*************************************************************************
@@ -4441,20 +4200,9 @@ UINT WINAPI ZoneComputePaneSize(HWND hwnd)
     return 0x95;
 }
 
-typedef void (WINAPI *fnSHChangeNotify)(LONG, UINT, LPCVOID, LPCVOID);
-
 void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2)
 {
-    static fnSHChangeNotify fn;
-    HMODULE hshell32;
-
-    if (!fn)
-    {
-        hshell32 = LoadLibraryA("shell32");
-        if (hshell32)
-            fn = (fnSHChangeNotify) GetProcAddress(hshell32, "SHChangeNotify");
-    }
-    fn(wEventId, uFlags, dwItem1, dwItem2);
+    SHChangeNotify(wEventId, uFlags, dwItem1, dwItem2);
 }
 
 typedef struct SHELL_USER_SID {   /* according to MSDN this should be in shlobj.h... */
diff --git a/dlls/shlwapi/path.c b/dlls/shlwapi/path.c
index b24c977..a06198f 100644
--- a/dlls/shlwapi/path.c
+++ b/dlls/shlwapi/path.c
@@ -50,7 +50,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell);
   } while (0)
 
 /* DLL handles for late bound calls */
-extern HMODULE SHLWAPI_hshell32;
+static HMODULE SHLWAPI_hshell32;
 
 /* Function pointers for GET_FUNC macro; these need to be global because of gcc bug */
 typedef BOOL (WINAPI *fnpIsNetDrive)(int);
diff --git a/dlls/shlwapi/shlwapi.spec b/dlls/shlwapi/shlwapi.spec
index 1a0be45..62a258e 100644
--- a/dlls/shlwapi/shlwapi.spec
+++ b/dlls/shlwapi/shlwapi.spec
@@ -71,7 +71,7 @@
 71  stdcall @(long ptr long) user32.GetClassNameW
 72  stdcall @(long ptr long) user32.GetClipboardFormatNameW
 73  stdcall @(long ptr) kernel32.GetCurrentDirectoryW
-74  stdcall -noname GetDlgItemTextWrapW(long long wstr long)
+74  stdcall @(long long wstr long) user32.GetDlgItemTextW
 75  stdcall @(wstr) kernel32.GetFileAttributesW
 76  stdcall @(wstr long ptr ptr) kernel32.GetFullPathNameW
 77  stdcall @(long long ptr long) kernel32.GetLocaleInfoW
@@ -296,7 +296,7 @@
 296 stub -noname CreateURLFileContentsW
 297 stub -noname CreateURLFileContentsA
 298 stdcall @(wstr wstr wstr wstr) kernel32.WritePrivateProfileStringW
-299 stdcall -noname ExtTextOutWrapW(long long long long ptr wstr long ptr)
+299 stdcall @(long long long long ptr wstr long ptr) gdi32.ExtTextOutW
 300 stdcall @(long long long long long long long long long long long long long wstr) gdi32.CreateFontW
 301 stdcall @(long wstr long ptr long ptr) user32.DrawTextExW
 302 stdcall @(long long long ptr) user32.GetMenuItemInfoW
@@ -334,12 +334,13 @@
 334 stdcall -noname SHGetPathFromIDListWrapW(ptr ptr)
 335 stdcall -noname ShellExecuteExWrapW(ptr)
 336 stdcall -noname SHFileOperationWrapW(ptr)
-337 stdcall -noname ExtractIconExWrapW(wstr long ptr ptr long)
+337 stdcall @(wstr long ptr ptr long) user32.ExtractIconExW
 338 stdcall @(wstr long) kernel32.SetFileAttributesW
 339 stdcall @(long long wstr ptr ptr long) kernel32.GetNumberFormatW
 340 stdcall @(long wstr wstr long) user32.MessageBoxW
 341 stdcall @(long ptr) kernel32.FindNextFileW
-342 stdcall -noname SHInterlockedCompareExchange(ptr long long)
+# FIXME: 342 should be forwarded to InterlockedCompareExchangePointer
+342 stdcall -noname @(ptr long long) kernel32.InterlockedCompareExchange
 343 stdcall -noname SHRegGetCLSIDKeyA(ptr str long long ptr)
 344 stdcall -noname SHRegGetCLSIDKeyW(ptr wstr long long ptr)
 345 stdcall -noname SHAnsiToAnsi(str ptr long)
@@ -348,7 +349,7 @@
 348 stub -noname SHGetFileDescriptionW
 349 stub -noname SHGetFileDescriptionA
 350 stdcall -noname GetFileVersionInfoSizeWrapW(wstr ptr)
-351 stdcall -noname GetFileVersionInfoWrapW(wstr ptr long ptr)
+351 stdcall -noname GetFileVersionInfoWrapW(wstr long long ptr)
 352 stdcall -noname VerQueryValueWrapW(ptr wstr ptr ptr)
 353 stub -noname SHFormatDateTimeA
 354 stub -noname SHFormatDateTimeW
diff --git a/dlls/shlwapi/shlwapi_main.c b/dlls/shlwapi/shlwapi_main.c
index 504a5dc..e595d5f 100644
--- a/dlls/shlwapi/shlwapi_main.c
+++ b/dlls/shlwapi/shlwapi_main.c
@@ -23,24 +23,14 @@
 
 #include "windef.h"
 #include "winbase.h"
-#include "winerror.h"
-#include "wine/debug.h"
 #define NO_SHLWAPI_REG
 #define NO_SHLWAPI_STREAM
 #include "shlwapi.h"
+#include "wine/debug.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(shell);
 
 HINSTANCE shlwapi_hInstance = 0;
-HMODULE SHLWAPI_hshell32 = 0;
-HMODULE SHLWAPI_hwinmm = 0;
-HMODULE SHLWAPI_hcomdlg32 = 0;
-HMODULE SHLWAPI_hcomctl32 = 0;
-HMODULE SHLWAPI_hmpr = 0;
-HMODULE SHLWAPI_hmlang = 0;
-HMODULE SHLWAPI_hurlmon = 0;
-HMODULE SHLWAPI_hversion = 0;
-
 DWORD SHLWAPI_ThreadRef_index = TLS_OUT_OF_INDEXES;
 
 /*************************************************************************
@@ -74,14 +64,6 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID fImpLoad)
 	    SHLWAPI_ThreadRef_index = TlsAlloc();
 	    break;
 	  case DLL_PROCESS_DETACH:
-	    if (SHLWAPI_hshell32)  FreeLibrary(SHLWAPI_hshell32);
-	    if (SHLWAPI_hwinmm)    FreeLibrary(SHLWAPI_hwinmm);
-	    if (SHLWAPI_hcomdlg32) FreeLibrary(SHLWAPI_hcomdlg32);
-	    if (SHLWAPI_hcomctl32) FreeLibrary(SHLWAPI_hcomctl32);
-	    if (SHLWAPI_hmpr)      FreeLibrary(SHLWAPI_hmpr);
-	    if (SHLWAPI_hmlang)    FreeLibrary(SHLWAPI_hmlang);
-	    if (SHLWAPI_hurlmon)   FreeLibrary(SHLWAPI_hurlmon);
-	    if (SHLWAPI_hversion)  FreeLibrary(SHLWAPI_hversion);
 	    if (SHLWAPI_ThreadRef_index != TLS_OUT_OF_INDEXES) TlsFree(SHLWAPI_ThreadRef_index);
 	    break;
 	}
diff --git a/dlls/shlwapi/string.c b/dlls/shlwapi/string.c
index a12c41e..82ee061 100644
--- a/dlls/shlwapi/string.c
+++ b/dlls/shlwapi/string.c
@@ -37,6 +37,7 @@
 #include "wingdi.h"
 #include "winuser.h"
 #include "shlobj.h"
+#include "mlang.h"
 #include "ddeml.h"
 #include "wine/unicode.h"
 #include "wine/debug.h"
@@ -45,22 +46,8 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(shell);
 
-/* Get a function pointer from a DLL handle */
-#define GET_FUNC(func, module, name, fail) \
-  do { \
-    if (!func) { \
-      if (!SHLWAPI_h##module && !(SHLWAPI_h##module = LoadLibraryA(#module ".dll"))) return fail; \
-      func = (fn##func)GetProcAddress(SHLWAPI_h##module, name); \
-      if (!func) return fail; \
-    } \
-  } while (0)
-
-extern HMODULE SHLWAPI_hmlang;
 extern HINSTANCE shlwapi_hInstance;
 
-typedef HRESULT (WINAPI *fnpConvertINetUnicodeToMultiByte)(LPDWORD,DWORD,LPCWSTR,LPINT,LPSTR,LPINT);
-static  fnpConvertINetUnicodeToMultiByte pConvertINetUnicodeToMultiByte;
-
 static HRESULT WINAPI _SHStrDupAA(LPCSTR,LPSTR*);
 static HRESULT WINAPI _SHStrDupAW(LPCWSTR,LPSTR*);
 
@@ -2609,8 +2596,7 @@ INT WINAPI SHUnicodeToAnsiCP(UINT CodePage, LPCWSTR lpSrcStr, LPSTR lpDstStr,
       DWORD dwMode = 0;
       INT nWideCharCount = len - 1;
 
-      GET_FUNC(pConvertINetUnicodeToMultiByte, mlang, "ConvertINetUnicodeToMultiByte", 0);
-      if (!pConvertINetUnicodeToMultiByte(&dwMode, CodePage, lpSrcStr, &nWideCharCount, lpDstStr,
+      if (!ConvertINetUnicodeToMultiByte(&dwMode, CodePage, lpSrcStr, &nWideCharCount, lpDstStr,
                                           lpiLen))
         return 0;
 
@@ -2622,7 +2608,7 @@ INT WINAPI SHUnicodeToAnsiCP(UINT CodePage, LPCWSTR lpSrcStr, LPSTR lpDstStr,
 
         *lpiLen = 0;
 
-        if (pConvertINetUnicodeToMultiByte(&dwMode, CodePage, lpSrcStr, &len, mem, lpiLen))
+        if (ConvertINetUnicodeToMultiByte(&dwMode, CodePage, lpSrcStr, &len, mem, lpiLen))
         {
           SHTruncateString(mem, *lpiLen);
           lstrcpynA(lpDstStr, mem, *lpiLen + 1);
diff --git a/dlls/shlwapi/thread.c b/dlls/shlwapi/thread.c
index 3be58cc..335b8ab 100644
--- a/dlls/shlwapi/thread.c
+++ b/dlls/shlwapi/thread.c
@@ -26,31 +26,18 @@
 #include "windef.h"
 #include "winbase.h"
 #include "winnls.h"
-#include "wine/debug.h"
+#include "winuser.h"
 #define NO_SHLWAPI_REG
 #define NO_SHLWAPI_PATH
 #define NO_SHLWAPI_GDI
 #define NO_SHLWAPI_STREAM
 #define NO_SHLWAPI_USER
 #include "shlwapi.h"
+#include "shlobj.h"
+#include "wine/debug.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(shell);
 
-/* Get a function pointer from a DLL handle */
-#define GET_FUNC(func, module, name, fail) \
-  do { \
-    if (!func) { \
-      if (!SHLWAPI_h##module && !(SHLWAPI_h##module = LoadLibraryA(#module ".dll"))) return fail; \
-      if (!(func = (void*)GetProcAddress(SHLWAPI_h##module, name))) return fail; \
-    } \
-  } while (0)
-
-/* DLL handles for late bound calls */
-extern HMODULE SHLWAPI_hshell32;
-
-/* Function pointers for GET_FUNC macro; these need to be global because of gcc bug */
-static HRESULT (WINAPI *pSHGetInstanceExplorer)(IUnknown**);
-
 extern DWORD SHLWAPI_ThreadRef_index;  /* Initialised in shlwapi_main.c */
 
 DWORD WINAPI SHStringFromGUIDA(REFGUID,LPSTR,INT);
@@ -118,9 +105,7 @@ HRESULT WINAPI _SHGetInstanceExplorer(IUnknown **lppUnknown)
 {
   /* This function is used within SHLWAPI only to hold the IE reference
    * for threads created with the CTF_PROCESS_REF flag set. */
-
-  GET_FUNC(pSHGetInstanceExplorer, shell32, "SHGetInstanceExplorer", E_FAIL);
-  return pSHGetInstanceExplorer(lppUnknown);
+    return SHGetInstanceExplorer(lppUnknown);
 }
 
 /* Internal thread information structure */
-- 
1.5.0.5






More information about the wine-patches mailing list