comctl32: Export subclass calls by names too.

This commit is contained in:
Nikolay Sivov 2010-05-27 02:03:09 +04:00 committed by Alexandre Julliard
parent 645f7c6208
commit d926939b12
2 changed files with 39 additions and 14 deletions

View File

@ -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

View File

@ -279,25 +279,50 @@ static BOOL RegisterWindowClasses(void)
return TRUE;
}
START_TEST(subclass)
static int init_function_pointers(void)
{
HMODULE hdll;
HMODULE hmod;
void *ptr;
hmod = GetModuleHandleA("comctl32.dll");
assert(hmod);
hdll = GetModuleHandleA("comctl32.dll");
assert(hdll);
/* 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();