Nikolay Sivov : comctl32: Export subclass calls by names too.
Alexandre Julliard
julliard at winehq.org
Thu May 27 10:46:42 CDT 2010
Module: wine
Branch: master
Commit: d926939b12d3c260ad1e4bc3d0ba7341901dcd7f
URL: http://source.winehq.org/git/wine.git/?a=commit;h=d926939b12d3c260ad1e4bc3d0ba7341901dcd7f
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Thu May 27 02:03:09 2010 +0400
comctl32: Export subclass calls by names too.
---
dlls/comctl32/comctl32.spec | 8 +++---
dlls/comctl32/tests/subclass.c | 45 +++++++++++++++++++++++++++++++--------
2 files changed, 39 insertions(+), 14 deletions(-)
diff --git a/dlls/comctl32/comctl32.spec b/dlls/comctl32/comctl32.spec
index 4249d56..c2c76a3 100644
--- a/dlls/comctl32/comctl32.spec
+++ b/dlls/comctl32/comctl32.spec
@@ -101,10 +101,10 @@
402 stdcall -noname FindMRUStringW(long wstr ptr)
403 stdcall -noname EnumMRUListW(long long ptr long)
404 stdcall -noname CreateMRUListLazyW(ptr long long long)
-410 stdcall -noname SetWindowSubclass(long ptr long long)
-411 stdcall -noname GetWindowSubclass(long ptr long ptr)
-412 stdcall -noname RemoveWindowSubclass(long ptr long)
-413 stdcall -noname DefSubclassProc(long long long long)
+410 stdcall -ordinal SetWindowSubclass(long ptr long long)
+411 stdcall -ordinal GetWindowSubclass(long ptr long ptr)
+412 stdcall -ordinal RemoveWindowSubclass(long ptr long)
+413 stdcall -ordinal DefSubclassProc(long long long long)
414 stdcall -noname MirrorIcon(ptr ptr)
415 stdcall -noname DrawTextWrap(long wstr long ptr long) user32.DrawTextW
416 stdcall -noname DrawTextExPrivWrap(long wstr long ptr long ptr) user32.DrawTextExW
diff --git a/dlls/comctl32/tests/subclass.c b/dlls/comctl32/tests/subclass.c
index f5a74ba..8511275 100644
--- a/dlls/comctl32/tests/subclass.c
+++ b/dlls/comctl32/tests/subclass.c
@@ -279,25 +279,50 @@ static BOOL RegisterWindowClasses(void)
return TRUE;
}
-START_TEST(subclass)
+static int init_function_pointers(void)
{
- HMODULE hdll;
-
- hdll = GetModuleHandleA("comctl32.dll");
- assert(hdll);
+ HMODULE hmod;
+ void *ptr;
+
+ hmod = GetModuleHandleA("comctl32.dll");
+ assert(hmod);
+
/* Functions have to be loaded by ordinal. Only XP and W2K3 export
* them by name.
*/
- pSetWindowSubclass = (void*)GetProcAddress(hdll, (LPSTR)410);
- pRemoveWindowSubclass = (void*)GetProcAddress(hdll, (LPSTR)412);
- pDefSubclassProc = (void*)GetProcAddress(hdll, (LPSTR)413);
-
+#define MAKEFUNC_ORD(f, ord) (p##f = (void*)GetProcAddress(hmod, (LPSTR)(ord)))
+ MAKEFUNC_ORD(SetWindowSubclass, 410);
+ MAKEFUNC_ORD(RemoveWindowSubclass, 412);
+ MAKEFUNC_ORD(DefSubclassProc, 413);
+#undef MAKEFUNC_ORD
+
if(!pSetWindowSubclass || !pRemoveWindowSubclass || !pDefSubclassProc)
{
win_skip("SetWindowSubclass and friends are not available\n");
- return;
+ return 0;
+ }
+
+ /* test named exports */
+ ptr = GetProcAddress(hmod, "SetWindowSubclass");
+ ok(broken(ptr == 0) || ptr != 0, "expected named export for SetWindowSubclass\n");
+ if(ptr)
+ {
+#define TESTNAMED(f) \
+ ptr = (void*)GetProcAddress(hmod, #f); \
+ ok(ptr != 0, "expected named export for " #f "\n");
+ TESTNAMED(RemoveWindowSubclass);
+ TESTNAMED(DefSubclassProc);
+ /* GetWindowSubclass exported for V6 only */
+#undef TESTNAMED
}
+ return 1;
+}
+
+START_TEST(subclass)
+{
+ if(!init_function_pointers()) return;
+
if(!RegisterWindowClasses()) assert(0);
test_subclass();
More information about the wine-cvs
mailing list