Hermes Belusca-Maito : shlwapi: Make SHCreateWorkerWindowA/ W 64-bit compatible.

Alexandre Julliard julliard at winehq.org
Tue Feb 13 13:57:55 CST 2018


Module: wine
Branch: master
Commit: 2c163225730e880a1506cb8c02b296cee47c6c89
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=2c163225730e880a1506cb8c02b296cee47c6c89

Author: Hermes Belusca-Maito <hermes.belusca at sfr.fr>
Date:   Mon Feb 12 23:33:58 2018 +0100

shlwapi: Make SHCreateWorkerWindowA/W 64-bit compatible.

Signed-off-by: Hermes Belusca-Maito <hermes.belusca at sfr.fr>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/shlwapi/ordinal.c    | 24 +++++++++++-------------
 dlls/shlwapi/shlwapi.spec |  4 ++--
 2 files changed, 13 insertions(+), 15 deletions(-)

diff --git a/dlls/shlwapi/ordinal.c b/dlls/shlwapi/ordinal.c
index 334607e..903df91 100644
--- a/dlls/shlwapi/ordinal.c
+++ b/dlls/shlwapi/ordinal.c
@@ -2575,14 +2575,14 @@ HRESULT WINAPI IUnknown_GetSite(LPUNKNOWN lpUnknown, REFIID iid, PVOID *lppSite)
  *  Success: The window handle of the newly created window.
  *  Failure: 0.
  */
-HWND WINAPI SHCreateWorkerWindowA(LONG wndProc, HWND hWndParent, DWORD dwExStyle,
+HWND WINAPI SHCreateWorkerWindowA(WNDPROC wndProc, HWND hWndParent, DWORD dwExStyle,
                                   DWORD dwStyle, HMENU hMenu, LONG_PTR wnd_extra)
 {
   static const char szClass[] = "WorkerA";
   WNDCLASSA wc;
   HWND hWnd;
 
-  TRACE("(0x%08x, %p, 0x%08x, 0x%08x, %p, 0x%08lx)\n",
+  TRACE("(%p, %p, 0x%08x, 0x%08x, %p, 0x%08lx)\n",
          wndProc, hWndParent, dwExStyle, dwStyle, hMenu, wnd_extra);
 
   /* Create Window class */
@@ -2604,8 +2604,7 @@ HWND WINAPI SHCreateWorkerWindowA(LONG wndProc, HWND hWndParent, DWORD dwExStyle
   if (hWnd)
   {
     SetWindowLongPtrW(hWnd, 0, wnd_extra);
-
-    if (wndProc) SetWindowLongPtrA(hWnd, GWLP_WNDPROC, wndProc);
+    if (wndProc) SetWindowLongPtrA(hWnd, GWLP_WNDPROC, (LONG_PTR)wndProc);
   }
 
   return hWnd;
@@ -2864,28 +2863,28 @@ DWORD WINAPI WhichPlatform(void)
  *
  * Unicode version of SHCreateWorkerWindowA.
  */
-HWND WINAPI SHCreateWorkerWindowW(LONG wndProc, HWND hWndParent, DWORD dwExStyle,
-                        DWORD dwStyle, HMENU hMenu, LONG msg_result)
+HWND WINAPI SHCreateWorkerWindowW(WNDPROC wndProc, HWND hWndParent, DWORD dwExStyle,
+                                  DWORD dwStyle, HMENU hMenu, LONG_PTR wnd_extra)
 {
   static const WCHAR szClass[] = { 'W', 'o', 'r', 'k', 'e', 'r', 'W', 0 };
   WNDCLASSW wc;
   HWND hWnd;
 
-  TRACE("(0x%08x, %p, 0x%08x, 0x%08x, %p, 0x%08x)\n",
-         wndProc, hWndParent, dwExStyle, dwStyle, hMenu, msg_result);
+  TRACE("(%p, %p, 0x%08x, 0x%08x, %p, 0x%08lx)\n",
+         wndProc, hWndParent, dwExStyle, dwStyle, hMenu, wnd_extra);
 
   /* If our OS is natively ANSI, use the ANSI version */
   if (GetVersion() & 0x80000000)  /* not NT */
   {
     TRACE("fallback to ANSI, ver 0x%08x\n", GetVersion());
-    return SHCreateWorkerWindowA(wndProc, hWndParent, dwExStyle, dwStyle, hMenu, msg_result);
+    return SHCreateWorkerWindowA(wndProc, hWndParent, dwExStyle, dwStyle, hMenu, wnd_extra);
   }
 
   /* Create Window class */
   wc.style         = 0;
   wc.lpfnWndProc   = DefWindowProcW;
   wc.cbClsExtra    = 0;
-  wc.cbWndExtra    = 4;
+  wc.cbWndExtra    = sizeof(LONG_PTR);
   wc.hInstance     = shlwapi_hInstance;
   wc.hIcon         = NULL;
   wc.hCursor       = LoadCursorW(NULL, (LPWSTR)IDC_ARROW);
@@ -2899,9 +2898,8 @@ HWND WINAPI SHCreateWorkerWindowW(LONG wndProc, HWND hWndParent, DWORD dwExStyle
                          hWndParent, hMenu, shlwapi_hInstance, 0);
   if (hWnd)
   {
-    SetWindowLongPtrW(hWnd, DWLP_MSGRESULT, msg_result);
-
-    if (wndProc) SetWindowLongPtrW(hWnd, GWLP_WNDPROC, wndProc);
+    SetWindowLongPtrW(hWnd, 0, wnd_extra);
+    if (wndProc) SetWindowLongPtrW(hWnd, GWLP_WNDPROC, (LONG_PTR)wndProc);
   }
 
   return hWnd;
diff --git a/dlls/shlwapi/shlwapi.spec b/dlls/shlwapi/shlwapi.spec
index 6b6ead2..134bb47 100644
--- a/dlls/shlwapi/shlwapi.spec
+++ b/dlls/shlwapi/shlwapi.spec
@@ -254,7 +254,7 @@
 254 stub -noname StopWatchExW
 255 stub -noname EventTraceHandler
 256 stdcall -ordinal IUnknown_GetSite(ptr ptr ptr)
-257 stdcall -noname SHCreateWorkerWindowA(long ptr long long ptr long)
+257 stdcall -noname SHCreateWorkerWindowA(ptr ptr long long ptr long)
 258 stub -noname SHRegisterWaitForSingleObject
 259 stub -noname SHUnregisterWait
 260 stdcall -noname SHQueueUserWorkItem(long long long long long long long)
@@ -275,7 +275,7 @@
 275 stub -noname RegisterGlobalHotkeyA
 276 stdcall -ordinal WhichPlatform()
 277 stub -noname SHDialogBox
-278 stdcall -noname SHCreateWorkerWindowW(long long long long long long)
+278 stdcall -noname SHCreateWorkerWindowW(ptr ptr long long ptr long)
 279 stdcall -noname SHInvokeDefaultCommand(ptr ptr ptr)
 280 stdcall -ordinal SHRegGetIntW(ptr wstr long)
 281 stdcall -noname SHPackDispParamsV(ptr ptr long ptr)




More information about the wine-cvs mailing list