[PATCH] comctl32/tests: Link to comctl32.dll dynamically

Nikolay Sivov nsivov at codeweavers.com
Wed Jan 24 04:26:30 CST 2018


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/comctl32/tests/Makefile.in |  2 +-
 dlls/comctl32/tests/animate.c   | 22 +----------
 dlls/comctl32/tests/combo.c     | 29 +++++++-------
 dlls/comctl32/tests/datetime.c  | 15 -------
 dlls/comctl32/tests/dpa.c       | 67 +++++++++++++-------------------
 dlls/comctl32/tests/header.c    | 38 +++++++++---------
 dlls/comctl32/tests/imagelist.c | 36 ++++++++---------
 dlls/comctl32/tests/ipaddress.c | 25 ------------
 dlls/comctl32/tests/listview.c  | 74 +++++++++++++++++++----------------
 dlls/comctl32/tests/monthcal.c  | 17 --------
 dlls/comctl32/tests/mru.c       | 30 +++++++-------
 dlls/comctl32/tests/pager.c     |  1 -
 dlls/comctl32/tests/progress.c  | 14 -------
 dlls/comctl32/tests/propsheet.c | 86 +++++++++++++++++++++++++----------------
 dlls/comctl32/tests/rebar.c     | 35 ++++++++---------
 dlls/comctl32/tests/status.c    |  2 -
 dlls/comctl32/tests/subclass.c  |  2 +-
 dlls/comctl32/tests/tab.c       | 42 ++++++++++++++------
 dlls/comctl32/tests/toolbar.c   | 63 +++++++++++++++++++-----------
 dlls/comctl32/tests/tooltips.c  |  2 +-
 dlls/comctl32/tests/trackbar.c  |  3 +-
 dlls/comctl32/tests/treeview.c  | 14 -------
 dlls/comctl32/tests/updown.c    | 21 +++++++---
 23 files changed, 296 insertions(+), 344 deletions(-)

diff --git a/dlls/comctl32/tests/Makefile.in b/dlls/comctl32/tests/Makefile.in
index f93ff2585d..4669efcf2b 100644
--- a/dlls/comctl32/tests/Makefile.in
+++ b/dlls/comctl32/tests/Makefile.in
@@ -1,5 +1,5 @@
 TESTDLL   = comctl32.dll
-IMPORTS   = comctl32 ole32 user32 gdi32 advapi32
+IMPORTS   = ole32 user32 gdi32 advapi32
 
 C_SRCS = \
 	animate.c \
diff --git a/dlls/comctl32/tests/animate.c b/dlls/comctl32/tests/animate.c
index fab345bb47..400de55b5e 100644
--- a/dlls/comctl32/tests/animate.c
+++ b/dlls/comctl32/tests/animate.c
@@ -108,26 +108,6 @@ static void create_animate(DWORD parent_style, DWORD animate_style)
     update_window(hAnimateParentWnd);
 }
 
-static void init(void)
-{
-    HMODULE hComctl32;
-    BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*);
-
-    hComctl32 = GetModuleHandleA("comctl32.dll");
-    pInitCommonControlsEx = (void*)GetProcAddress(hComctl32, "InitCommonControlsEx");
-    if (pInitCommonControlsEx)
-    {
-        INITCOMMONCONTROLSEX iccex;
-        iccex.dwSize = sizeof(iccex);
-        iccex.dwICC  = ICC_ANIMATE_CLASS;
-        pInitCommonControlsEx(&iccex);
-    }
-    else
-        InitCommonControls();
-
-    shell32 = LoadLibraryA("Shell32.dll");
-}
-
 static void destroy_animate(void)
 {
     MSG msg;
@@ -175,7 +155,7 @@ static void test_play(void)
 
 START_TEST(animate)
 {
-    init();
+    shell32 = LoadLibraryA("Shell32.dll");
 
     test_play();
 
diff --git a/dlls/comctl32/tests/combo.c b/dlls/comctl32/tests/combo.c
index ef7c3f796b..895d9429b4 100644
--- a/dlls/comctl32/tests/combo.c
+++ b/dlls/comctl32/tests/combo.c
@@ -480,25 +480,20 @@ static LRESULT CALLBACK ComboExTestWndProc(HWND hWnd, UINT msg, WPARAM wParam, L
     return 0L;
 }
 
-static BOOL init(void)
+static void init_functions(void)
 {
-    HMODULE hComctl32;
-    BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*);
-    WNDCLASSA wc;
-    INITCOMMONCONTROLSEX iccex;
+    HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
 
-    hComctl32 = GetModuleHandleA("comctl32.dll");
-    pInitCommonControlsEx = (void*)GetProcAddress(hComctl32, "InitCommonControlsEx");
-    if (!pInitCommonControlsEx)
-    {
-        win_skip("InitCommonControlsEx() is missing. Skipping the tests\n");
-        return FALSE;
-    }
-    iccex.dwSize = sizeof(iccex);
-    iccex.dwICC  = ICC_USEREX_CLASSES;
-    pInitCommonControlsEx(&iccex);
+#define X(f) p##f = (void*)GetProcAddress(hComCtl32, #f);
+#define X2(f, ord) p##f = (void*)GetProcAddress(hComCtl32, (const char *)ord);
+    X2(SetWindowSubclass, 410);
+#undef X
+#undef X2
+}
 
-    pSetWindowSubclass = (void*)GetProcAddress(hComctl32, (LPSTR)410);
+static BOOL init(void)
+{
+    WNDCLASSA wc;
 
     wc.style = CS_HREDRAW | CS_VREDRAW;
     wc.cbClsExtra = 0;
@@ -1161,6 +1156,8 @@ START_TEST(combo)
     ULONG_PTR ctx_cookie;
     HANDLE hCtx;
 
+    init_functions();
+
     if (!init())
         return;
 
diff --git a/dlls/comctl32/tests/datetime.c b/dlls/comctl32/tests/datetime.c
index c9407bef61..691eac9813 100644
--- a/dlls/comctl32/tests/datetime.c
+++ b/dlls/comctl32/tests/datetime.c
@@ -779,21 +779,6 @@ static void test_dts_shownone(void)
 
 START_TEST(datetime)
 {
-    HMODULE hComctl32;
-    BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*);
-    INITCOMMONCONTROLSEX iccex;
-
-    hComctl32 = GetModuleHandleA("comctl32.dll");
-    pInitCommonControlsEx = (void*)GetProcAddress(hComctl32, "InitCommonControlsEx");
-    if (!pInitCommonControlsEx)
-    {
-        win_skip("InitCommonControlsEx() is missing. Skipping the tests\n");
-        return;
-    }
-    iccex.dwSize = sizeof(iccex);
-    iccex.dwICC  = ICC_DATE_CLASSES;
-    pInitCommonControlsEx(&iccex);
-
     init_msg_sequences(sequences, NUM_MSG_SEQUENCES);
 
     test_dtm_set_format();
diff --git a/dlls/comctl32/tests/dpa.c b/dlls/comctl32/tests/dpa.c
index 4eb32a4187..c795c14f4e 100644
--- a/dlls/comctl32/tests/dpa.c
+++ b/dlls/comctl32/tests/dpa.c
@@ -59,38 +59,33 @@ static INT     (WINAPI *pDPA_Search)(HDPA,PVOID,INT,PFNDPACOMPARE,LPARAM,UINT);
 static BOOL    (WINAPI *pDPA_SetPtr)(HDPA,INT,PVOID);
 static BOOL    (WINAPI *pDPA_Sort)(HDPA,PFNDPACOMPARE,LPARAM);
 
-#define COMCTL32_GET_PROC(func, ord) \
-  ((p ## func = (PVOID)GetProcAddress(hcomctl32,(LPCSTR)ord)) ? 1 \
-   : (trace( #func " not exported\n"), 0)) 
-
-static BOOL InitFunctionPtrs(HMODULE hcomctl32)
+static void init_functions(void)
 {
-    /* 4.00+ */
-    if(COMCTL32_GET_PROC(DPA_Clone, 331) &&
-       COMCTL32_GET_PROC(DPA_Create, 328) &&
-       COMCTL32_GET_PROC(DPA_CreateEx, 340) &&
-       COMCTL32_GET_PROC(DPA_DeleteAllPtrs, 337) &&
-       COMCTL32_GET_PROC(DPA_DeletePtr, 336) &&
-       COMCTL32_GET_PROC(DPA_Destroy, 329) &&
-       COMCTL32_GET_PROC(DPA_GetPtr, 332) &&
-       COMCTL32_GET_PROC(DPA_GetPtrIndex, 333) &&
-       COMCTL32_GET_PROC(DPA_Grow, 330) &&
-       COMCTL32_GET_PROC(DPA_InsertPtr, 334) &&
-       COMCTL32_GET_PROC(DPA_Search, 339) &&
-       COMCTL32_GET_PROC(DPA_SetPtr, 335) &&
-       COMCTL32_GET_PROC(DPA_Sort, 338))
-    {
-        /* 4.71+ */
-        COMCTL32_GET_PROC(DPA_DestroyCallback, 386) &&
-        COMCTL32_GET_PROC(DPA_EnumCallback, 385) &&
-        COMCTL32_GET_PROC(DPA_LoadStream, 9) &&
-        COMCTL32_GET_PROC(DPA_Merge, 11) &&
-        COMCTL32_GET_PROC(DPA_SaveStream, 10);
-
-        return TRUE;
-    }
+    HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
 
-    return FALSE;
+#define X2(f, ord) p##f = (void*)GetProcAddress(hComCtl32, (const char *)ord);
+    /* 4.00+ */
+    X2(DPA_Clone, 331);
+    X2(DPA_Create, 328);
+    X2(DPA_CreateEx, 340);
+    X2(DPA_DeleteAllPtrs, 337);
+    X2(DPA_DeletePtr, 336);
+    X2(DPA_Destroy, 329);
+    X2(DPA_GetPtr, 332);
+    X2(DPA_GetPtrIndex, 333);
+    X2(DPA_Grow, 330);
+    X2(DPA_InsertPtr, 334);
+    X2(DPA_Search, 339);
+    X2(DPA_SetPtr, 335);
+    X2(DPA_Sort, 338);
+
+    /* 4.71+ */
+    X2(DPA_DestroyCallback, 386);
+    X2(DPA_EnumCallback, 385);
+    X2(DPA_LoadStream, 9);
+    X2(DPA_Merge, 11);
+    X2(DPA_SaveStream, 10);
+#undef X2
 }
 
 /* Callbacks */
@@ -628,7 +623,7 @@ static void test_DPA_LoadStream(void)
     dpa = NULL;
     hRes = pDPA_LoadStream(&dpa, CB_Load, pStm, NULL);
     expect(S_OK, hRes);
-    DPA_Destroy(dpa);
+    pDPA_Destroy(dpa);
 
     /* try with altered dwData2 field */
     header.dwSize = sizeof(header);
@@ -742,15 +737,7 @@ if (0) {
 
 START_TEST(dpa)
 {
-    HMODULE hcomctl32;
-
-    hcomctl32 = GetModuleHandleA("comctl32.dll");
-
-    if(!InitFunctionPtrs(hcomctl32))
-    {
-        win_skip("Needed functions are not available\n");
-        return;
-    }
+    init_functions();
 
     test_dpa();
     test_DPA_Merge();
diff --git a/dlls/comctl32/tests/header.c b/dlls/comctl32/tests/header.c
index ae75199be2..31610f0c9a 100644
--- a/dlls/comctl32/tests/header.c
+++ b/dlls/comctl32/tests/header.c
@@ -26,6 +26,9 @@
 #include "v6util.h"
 #include "msg.h"
 
+static HIMAGELIST (WINAPI *pImageList_Create)(int, int, UINT, int, int);
+static BOOL (WINAPI *pImageList_Destroy)(HIMAGELIST);
+
 typedef struct tagEXPECTEDNOTIFY
 {
     INT iCode;
@@ -953,7 +956,7 @@ static void test_hdm_sethotdivider(HWND hParent)
 
 static void test_hdm_imageMessages(HWND hParent)
 {
-    HIMAGELIST hImageList = ImageList_Create (4, 4, 0, 1, 0);
+    HIMAGELIST hImageList = pImageList_Create (4, 4, 0, 1, 0);
     HIMAGELIST hIml;
     BOOL wasValid;
     HWND hChild;
@@ -973,13 +976,13 @@ static void test_hdm_imageMessages(HWND hParent)
 
     hIml = (HIMAGELIST) SendMessageA(hChild, HDM_CREATEDRAGIMAGE, 0, 0);
     ok(hIml != NULL, "Expected non-NULL handle, got %p\n", hIml);
-    ImageList_Destroy(hIml);
+    pImageList_Destroy(hIml);
 
     ok_sequence(sequences, HEADER_SEQ_INDEX, imageMessages_seq, "imageMessages sequence testing", FALSE);
 
     DestroyWindow(hChild);
 
-    wasValid = ImageList_Destroy(hImageList);
+    wasValid = pImageList_Destroy(hImageList);
     ok(wasValid, "Header must not free image list at destruction!\n");
 }
 
@@ -1644,28 +1647,23 @@ static LRESULT CALLBACK HeaderTestWndProc(HWND hWnd, UINT msg, WPARAM wParam, LP
     return 0L;
 }
 
+static void init_functions(void)
+{
+    HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
+
+#define X(f) p##f = (void*)GetProcAddress(hComCtl32, #f);
+    X(ImageList_Create);
+    X(ImageList_Destroy);
+#undef X
+}
+
 static BOOL init(void)
 {
-    HMODULE hComctl32;
-    BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*);
     WNDCLASSA wc;
-    INITCOMMONCONTROLSEX iccex;
     TEXTMETRICA tm;
     HFONT hOldFont;
     HDC hdc;
 
-    hComctl32 = GetModuleHandleA("comctl32.dll");
-    pInitCommonControlsEx = (void*)GetProcAddress(hComctl32, "InitCommonControlsEx");
-    if (!pInitCommonControlsEx)
-    {
-        win_skip("InitCommonControlsEx() is missing. Skipping the tests\n");
-        return FALSE;
-    }
-
-    iccex.dwSize = sizeof(iccex);
-    iccex.dwICC  = ICC_USEREX_CLASSES;
-    pInitCommonControlsEx(&iccex);
-
     wc.style = CS_HREDRAW | CS_VREDRAW;
     wc.cbClsExtra = 0;
     wc.cbWndExtra = 0;
@@ -1821,6 +1819,8 @@ START_TEST(header)
     ULONG_PTR ctx_cookie;
     HANDLE hCtx;
 
+    init_functions();
+
     if (!init())
         return;
 
@@ -1852,6 +1852,8 @@ START_TEST(header)
         return;
     }
 
+    init_functions();
+
     /* comctl32 version 6 tests start here */
     test_hdf_fixedwidth(parent_hwnd);
     test_hds_nosizing(parent_hwnd);
diff --git a/dlls/comctl32/tests/imagelist.c b/dlls/comctl32/tests/imagelist.c
index 653467c999..3838563c38 100644
--- a/dlls/comctl32/tests/imagelist.c
+++ b/dlls/comctl32/tests/imagelist.c
@@ -85,6 +85,7 @@ static BOOL (WINAPI *pImageList_Write)(HIMAGELIST, IStream *);
 static HIMAGELIST (WINAPI *pImageList_Read)(IStream *);
 static BOOL (WINAPI *pImageList_Copy)(HIMAGELIST, int, HIMAGELIST, int, UINT);
 static HIMAGELIST (WINAPI *pImageList_LoadImageW)(HINSTANCE, LPCWSTR, int, int, COLORREF, UINT, UINT);
+static BOOL (WINAPI *pImageList_Draw)(HIMAGELIST,INT,HDC,INT,INT,UINT);
 
 static HINSTANCE hinst;
 
@@ -205,7 +206,7 @@ static HDC show_image(HWND hwnd, HIMAGELIST himl, int idx, int size,
 
     SetWindowTextA(hwnd, loc);
     hdc = GetDC(hwnd);
-    ImageList_Draw(himl, idx, hdc, 0, 0, ILD_TRANSPARENT);
+    pImageList_Draw(himl, idx, hdc, 0, 0, ILD_TRANSPARENT);
 
     force_redraw(hwnd);
 
@@ -504,8 +505,8 @@ static void test_DrawIndirect(void)
     ok(hbm3 != 0, "no bitmap 3\n");
 
     /* add three */
-    ok(0 == ImageList_Add(himl, hbm1, 0),"failed to add bitmap 1\n");
-    ok(1 == ImageList_Add(himl, hbm2, 0),"failed to add bitmap 2\n");
+    ok(0 == pImageList_Add(himl, hbm1, 0),"failed to add bitmap 1\n");
+    ok(1 == pImageList_Add(himl, hbm2, 0),"failed to add bitmap 2\n");
 
     if (pImageList_SetImageCount)
     {
@@ -1576,7 +1577,7 @@ cleanup:
 
     if(himl)
     {
-        ret = ImageList_Destroy(himl);
+        ret = pImageList_Destroy(himl);
         ok(ret, "ImageList_Destroy failed\n");
     }
 }
@@ -1599,21 +1600,21 @@ static void test_iimagelist(void)
     imgl = (IImageList*)createImageList(32, 32);
     ret = IImageList_AddRef(imgl);
     ok(ret == 2, "Expected 2, got %d\n", ret);
-    ret = ImageList_Destroy((HIMAGELIST)imgl);
+    ret = pImageList_Destroy((HIMAGELIST)imgl);
     ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
-    ret = ImageList_Destroy((HIMAGELIST)imgl);
+    ret = pImageList_Destroy((HIMAGELIST)imgl);
     ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
-    ret = ImageList_Destroy((HIMAGELIST)imgl);
+    ret = pImageList_Destroy((HIMAGELIST)imgl);
     ok(ret == FALSE, "Expected FALSE, got %d\n", ret);
 
     imgl = (IImageList*)createImageList(32, 32);
     ret = IImageList_AddRef(imgl);
     ok(ret == 2, "Expected 2, got %d\n", ret);
-    ret = ImageList_Destroy((HIMAGELIST)imgl);
+    ret = pImageList_Destroy((HIMAGELIST)imgl);
     ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
     ret = IImageList_Release(imgl);
     ok(ret == 0, "Expected 0, got %d\n", ret);
-    ret = ImageList_Destroy((HIMAGELIST)imgl);
+    ret = pImageList_Destroy((HIMAGELIST)imgl);
     ok(ret == FALSE, "Expected FALSE, got %d\n", ret);
 
     /* ref counting, HIMAGELIST_QueryInterface adds a reference */
@@ -1674,7 +1675,7 @@ static void test_IImageList_Add_Remove(void)
     int ret;
 
     /* create an imagelist to play with */
-    himl = ImageList_Create(84, 84, ILC_COLOR16, 0, 3);
+    himl = pImageList_Create(84, 84, ILC_COLOR16, 0, 3);
     ok(himl != 0,"failed to create imagelist\n");
 
     imgl = (IImageList *) himl;
@@ -1728,7 +1729,7 @@ static void test_IImageList_Get_SetImageCount(void)
     INT ret;
 
     /* create an imagelist to play with */
-    himl = ImageList_Create(84, 84, ILC_COLOR16, 0, 3);
+    himl = pImageList_Create(84, 84, ILC_COLOR16, 0, 3);
     ok(himl != 0,"failed to create imagelist\n");
 
     imgl = (IImageList *) himl;
@@ -1773,7 +1774,7 @@ static void test_IImageList_Draw(void)
     ok(hdc!=NULL, "couldn't get DC\n");
 
     /* create an imagelist to play with */
-    himl = ImageList_Create(48, 48, ILC_COLOR16, 0, 3);
+    himl = pImageList_Create(48, 48, ILC_COLOR16, 0, 3);
     ok(himl!=0,"failed to create imagelist\n");
 
     imgl = (IImageList *) himl;
@@ -1850,10 +1851,10 @@ static void test_IImageList_Merge(void)
     HRESULT hr;
     int ret;
 
-    himl1 = ImageList_Create(32,32,0,0,3);
+    himl1 = pImageList_Create(32,32,0,0,3);
     ok(himl1 != NULL,"failed to create himl1\n");
 
-    himl2 = ImageList_Create(32,32,0,0,3);
+    himl2 = pImageList_Create(32,32,0,0,3);
     ok(himl2 != NULL,"failed to create himl2\n");
 
     hicon1 = CreateIcon(hinst, 32, 32, 1, 1, icon_bits, icon_bits);
@@ -1887,7 +1888,7 @@ if (0)
 
     /* Same happens if himl2 is empty */
     IImageList_Release(imgl2);
-    himl2 = ImageList_Create(32,32,0,0,3);
+    himl2 = pImageList_Create(32,32,0,0,3);
     ok(himl2 != NULL,"failed to recreate himl2\n");
 
     imgl2 = (IImageList *) himl2;
@@ -2385,7 +2386,7 @@ static void test_IImageList_GetIconSize(void)
 
 static void init_functions(void)
 {
-    HMODULE hComCtl32 = GetModuleHandleA("comctl32.dll");
+    HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
 
 #define X(f) p##f = (void*)GetProcAddress(hComCtl32, #f);
 #define X2(f, ord) p##f = (void*)GetProcAddress(hComCtl32, (const char *)ord);
@@ -2414,6 +2415,7 @@ static void init_functions(void)
     X(ImageList_LoadImageW);
     X(ImageList_CoCreateInstance);
     X(HIMAGELIST_QueryInterface);
+    X(ImageList_Draw);
 #undef X
 #undef X2
 }
@@ -2427,8 +2429,6 @@ START_TEST(imagelist)
 
     hinst = GetModuleHandleA(NULL);
 
-    InitCommonControls();
-
     test_create_destroy();
     test_begindrag();
     test_hotspot();
diff --git a/dlls/comctl32/tests/ipaddress.c b/dlls/comctl32/tests/ipaddress.c
index 093f649c9e..6d8e9ccf4b 100644
--- a/dlls/comctl32/tests/ipaddress.c
+++ b/dlls/comctl32/tests/ipaddress.c
@@ -61,32 +61,7 @@ static void test_get_set_text(void)
     DestroyWindow(hwnd);
 }
 
-static BOOL init(void)
-{
-    HMODULE hComctl32;
-    BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*);
-    INITCOMMONCONTROLSEX iccex;
-
-    hComctl32 = GetModuleHandleA("comctl32.dll");
-    pInitCommonControlsEx = (void*)GetProcAddress(hComctl32, "InitCommonControlsEx");
-    if (!pInitCommonControlsEx)
-    {
-        win_skip("InitCommonControlsEx() is missing.\n");
-        return FALSE;
-    }
-
-    iccex.dwSize = sizeof(iccex);
-    /* W2K and below need ICC_INTERNET_CLASSES for the IP Address Control */
-    iccex.dwICC  = ICC_INTERNET_CLASSES;
-    pInitCommonControlsEx(&iccex);
-
-    return TRUE;
-}
-
 START_TEST(ipaddress)
 {
-    if (!init())
-        return;
-
     test_get_set_text();
 }
diff --git a/dlls/comctl32/tests/listview.c b/dlls/comctl32/tests/listview.c
index 18e874a00f..72367c67b3 100644
--- a/dlls/comctl32/tests/listview.c
+++ b/dlls/comctl32/tests/listview.c
@@ -28,6 +28,11 @@
 #include "v6util.h"
 #include "msg.h"
 
+static HIMAGELIST (WINAPI *pImageList_Create)(int, int, UINT, int, int);
+static BOOL (WINAPI *pImageList_Destroy)(HIMAGELIST);
+static int (WINAPI *pImageList_Add)(HIMAGELIST, HBITMAP, HBITMAP);
+static BOOL (WINAPI *p_TrackMouseEvent)(TRACKMOUSEEVENT *);
+
 enum seq_index {
     PARENT_SEQ_INDEX,
     PARENT_FULL_SEQ_INDEX,
@@ -73,6 +78,18 @@ static BOOL g_focus_test_LVN_DELETEITEM;
 
 static HWND subclass_editbox(HWND hwndListview);
 
+static void init_functions(void)
+{
+    HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
+
+#define X(f) p##f = (void*)GetProcAddress(hComCtl32, #f);
+    X(ImageList_Create);
+    X(ImageList_Destroy);
+    X(ImageList_Add);
+    X(_TrackMouseEvent);
+#undef X
+}
+
 static struct msg_sequence *sequences[NUM_MSG_SEQUENCES];
 
 static const struct message create_ownerdrawfixed_parent_seq[] = {
@@ -848,13 +865,13 @@ static void test_images(void)
     RECT r1, r2;
     static CHAR hello[] = "hello";
 
-    himl = ImageList_Create(40, 40, 0, 4, 4);
+    himl = pImageList_Create(40, 40, 0, 4, 4);
     ok(himl != NULL, "failed to create imagelist\n");
 
     hbmp = CreateBitmap(40, 40, 1, 1, NULL);
     ok(hbmp != NULL, "failed to create bitmap\n");
 
-    r = ImageList_Add(himl, hbmp, 0);
+    r = pImageList_Add(himl, hbmp, 0);
     ok(r == 0, "should be zero\n");
 
     hwnd = CreateWindowExA(0, "SysListView32", "foo", LVS_OWNERDRAWFIXED,
@@ -1539,7 +1556,7 @@ static void test_create(void)
     cls.lpszClassName = "MyListView32";
     ok(RegisterClassExA(&cls), "RegisterClassEx failed\n");
 
-    test_create_imagelist = ImageList_Create(16, 16, 0, 5, 10);
+    test_create_imagelist = pImageList_Create(16, 16, 0, 5, 10);
     hList = CreateWindowA("MyListView32", "Test", WS_VISIBLE, 0, 0, 100, 100, NULL, NULL, GetModuleHandleA(NULL), 0);
     ok((HIMAGELIST)SendMessageA(hList, LVM_GETIMAGELIST, 0, 0) == test_create_imagelist, "Image list not obtained\n");
     hHeader = (HWND)SendMessageA(hList, LVM_GETHEADER, 0, 0);
@@ -3732,15 +3749,15 @@ static void test_hittest(void)
     test_lvm_hittest(hwnd, x, y, -1, LVHT_TORIGHT, 0, FALSE, TRUE);
     test_lvm_subitemhittest(hwnd, x, y, -1, -1, LVHT_NOWHERE, FALSE, FALSE, FALSE);
     /* try with icons, state icons index is 1 based so at least 2 bitmaps needed */
-    himl = ImageList_Create(16, 16, 0, 4, 4);
+    himl = pImageList_Create(16, 16, 0, 4, 4);
     ok(himl != NULL, "failed to create imagelist\n");
     hbmp = CreateBitmap(16, 16, 1, 1, NULL);
     ok(hbmp != NULL, "failed to create bitmap\n");
-    r = ImageList_Add(himl, hbmp, 0);
+    r = pImageList_Add(himl, hbmp, 0);
     ok(r == 0, "should be zero\n");
     hbmp = CreateBitmap(16, 16, 1, 1, NULL);
     ok(hbmp != NULL, "failed to create bitmap\n");
-    r = ImageList_Add(himl, hbmp, 0);
+    r = pImageList_Add(himl, hbmp, 0);
     ok(r == 1, "should be one\n");
 
     r = SendMessageA(hwnd, LVM_SETIMAGELIST, LVSIL_STATE, (LPARAM)himl);
@@ -4022,15 +4039,15 @@ todo_wine
     expect(TRUE, r);
 
     /* state icons */
-    himl = ImageList_Create(16, 16, 0, 2, 2);
+    himl = pImageList_Create(16, 16, 0, 2, 2);
     ok(himl != NULL, "failed to create imagelist\n");
     hbm = CreateBitmap(16, 16, 1, 1, NULL);
     ok(hbm != NULL, "failed to create bitmap\n");
-    r = ImageList_Add(himl, hbm, 0);
+    r = pImageList_Add(himl, hbm, 0);
     expect(0, r);
     hbm = CreateBitmap(16, 16, 1, 1, NULL);
     ok(hbm != NULL, "failed to create bitmap\n");
-    r = ImageList_Add(himl, hbm, 0);
+    r = pImageList_Add(himl, hbm, 0);
     expect(1, r);
 
     r = SendMessageA(hwnd, LVM_SETIMAGELIST, LVSIL_STATE, (LPARAM)himl);
@@ -4702,9 +4719,9 @@ static void test_getitemspacing(void)
     expect(cy, HIWORD(ret));
 
     /* now try with icons */
-    himl40 = ImageList_Create(40, 40, 0, 4, 4);
+    himl40 = pImageList_Create(40, 40, 0, 4, 4);
     ok(himl40 != NULL, "failed to create imagelist\n");
-    himl80 = ImageList_Create(80, 80, 0, 4, 4);
+    himl80 = pImageList_Create(80, 80, 0, 4, 4);
     ok(himl80 != NULL, "failed to create imagelist\n");
     ret = SendMessageA(hwnd, LVM_SETIMAGELIST, LVSIL_NORMAL, (LPARAM)himl40);
     expect(0, ret);
@@ -4772,7 +4789,7 @@ static void test_getitemspacing(void)
     expect(cy + 40, HIWORD(ret));
 
     SendMessageA(hwnd, LVM_SETIMAGELIST, LVSIL_NORMAL, 0);
-    ImageList_Destroy(himl80);
+    pImageList_Destroy(himl80);
     DestroyWindow(hwnd);
     /* LVS_SMALLICON */
     hwnd = create_listview_control(LVS_SMALLICON);
@@ -4790,7 +4807,7 @@ static void test_getitemspacing(void)
     expect(cy + 40, HIWORD(ret));
 
     SendMessageA(hwnd, LVM_SETIMAGELIST, LVSIL_NORMAL, 0);
-    ImageList_Destroy(himl40);
+    pImageList_Destroy(himl40);
     DestroyWindow(hwnd);
     /* LVS_REPORT */
     hwnd = create_listview_control(LVS_REPORT);
@@ -4973,11 +4990,11 @@ static void test_approximate_viewrect(void)
 
     /* LVS_ICON */
     hwnd = create_listview_control(LVS_ICON);
-    himl = ImageList_Create(40, 40, 0, 4, 4);
+    himl = pImageList_Create(40, 40, 0, 4, 4);
     ok(himl != NULL, "failed to create imagelist\n");
     hbmp = CreateBitmap(40, 40, 1, 1, NULL);
     ok(hbmp != NULL, "failed to create bitmap\n");
-    ret = ImageList_Add(himl, hbmp, 0);
+    ret = pImageList_Add(himl, hbmp, 0);
     expect(0, ret);
     ret = SendMessageA(hwnd, LVM_SETIMAGELIST, 0, (LPARAM)himl);
     expect(0, ret);
@@ -5594,7 +5611,7 @@ static void test_createdragimage(void)
 
     himl = (HIMAGELIST)SendMessageA(list, LVM_CREATEDRAGIMAGE, 0, (LPARAM)&pt);
     ok(himl != NULL, "got %p\n", himl);
-    ImageList_Destroy(himl);
+    pImageList_Destroy(himl);
 
     DestroyWindow(list);
 }
@@ -5709,9 +5726,9 @@ static void test_imagelists(void)
     HIMAGELIST himl1, himl2, himl3;
     LRESULT ret;
 
-    himl1 = ImageList_Create(40, 40, 0, 4, 4);
-    himl2 = ImageList_Create(40, 40, 0, 4, 4);
-    himl3 = ImageList_Create(40, 40, 0, 4, 4);
+    himl1 = pImageList_Create(40, 40, 0, 4, 4);
+    himl2 = pImageList_Create(40, 40, 0, 4, 4);
+    himl3 = pImageList_Create(40, 40, 0, 4, 4);
     ok(himl1 != NULL, "Failed to create imagelist\n");
     ok(himl2 != NULL, "Failed to create imagelist\n");
     ok(himl3 != NULL, "Failed to create imagelist\n");
@@ -5977,7 +5994,7 @@ static void test_oneclickactivate(void)
 
     track.cbSize = sizeof(track);
     track.dwFlags = TME_QUERY;
-    _TrackMouseEvent(&track);
+    p_TrackMouseEvent(&track);
     ok(track.hwndTrack == hwnd, "hwndTrack != hwnd\n");
     ok(track.dwFlags == TME_LEAVE, "dwFlags = %x\n", track.dwFlags);
 
@@ -6241,23 +6258,10 @@ static void test_state_image(void)
 
 START_TEST(listview)
 {
-    HMODULE hComctl32;
-    BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*);
-
     ULONG_PTR ctx_cookie;
     HANDLE hCtx;
 
-    hComctl32 = GetModuleHandleA("comctl32.dll");
-    pInitCommonControlsEx = (void*)GetProcAddress(hComctl32, "InitCommonControlsEx");
-    if (pInitCommonControlsEx)
-    {
-        INITCOMMONCONTROLSEX iccex;
-        iccex.dwSize = sizeof(iccex);
-        iccex.dwICC  = ICC_LISTVIEW_CLASSES;
-        pInitCommonControlsEx(&iccex);
-    }
-    else
-        InitCommonControls();
+    init_functions();
 
     init_msg_sequences(sequences, NUM_MSG_SEQUENCES);
 
@@ -6319,6 +6323,8 @@ START_TEST(listview)
         return;
     }
 
+    init_functions();
+
     /* comctl32 version 6 tests start here */
     test_get_set_view();
     test_canceleditlabel();
diff --git a/dlls/comctl32/tests/monthcal.c b/dlls/comctl32/tests/monthcal.c
index 4216fd5e67..10bad66da6 100644
--- a/dlls/comctl32/tests/monthcal.c
+++ b/dlls/comctl32/tests/monthcal.c
@@ -598,8 +598,6 @@ static HWND create_parent_window(void)
 {
     HWND hwnd;
 
-    InitCommonControls();
-
     /* flush message sequences, so we can check the new sequence by the end of function */
     flush_sequences(sequences, NUM_MSG_SEQUENCES);
 
@@ -2041,24 +2039,9 @@ static void test_sel_notify(void)
 
 START_TEST(monthcal)
 {
-    BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*);
-    INITCOMMONCONTROLSEX iccex;
-    HMODULE hComctl32;
-
     ULONG_PTR ctx_cookie;
     HANDLE hCtx;
 
-    hComctl32 = GetModuleHandleA("comctl32.dll");
-    pInitCommonControlsEx = (void*)GetProcAddress(hComctl32, "InitCommonControlsEx");
-    if (!pInitCommonControlsEx)
-    {
-        win_skip("InitCommonControlsEx() is missing. Skipping the tests\n");
-        return;
-    }
-    iccex.dwSize = sizeof(iccex);
-    iccex.dwICC  = ICC_DATE_CLASSES;
-    pInitCommonControlsEx(&iccex);
-
     test_monthcal();
 
     init_msg_sequences(sequences, NUM_MSG_SEQUENCES);
diff --git a/dlls/comctl32/tests/mru.c b/dlls/comctl32/tests/mru.c
index af49aba213..664f7a54f4 100644
--- a/dlls/comctl32/tests/mru.c
+++ b/dlls/comctl32/tests/mru.c
@@ -76,18 +76,22 @@ static INT    (WINAPI *pFindMRUData)(HANDLE, LPCVOID, DWORD, LPINT);
 static INT    (WINAPI *pAddMRUData)(HANDLE, LPCVOID, DWORD);
 static HANDLE (WINAPI *pCreateMRUListW)(MRUINFOW*);
 
-static void InitPointers(void)
+static void init_functions(void)
 {
-    pCreateMRUListA = (void*)GetProcAddress(hComctl32,(LPCSTR)151);
-    pFreeMRUList    = (void*)GetProcAddress(hComctl32,(LPCSTR)152);
-    pAddMRUStringA  = (void*)GetProcAddress(hComctl32,(LPCSTR)153);
-    pEnumMRUListA   = (void*)GetProcAddress(hComctl32,(LPCSTR)154);
-    pCreateMRUListLazyA = (void*)GetProcAddress(hComctl32,(LPCSTR)157);
-    pAddMRUData     = (void*)GetProcAddress(hComctl32,(LPCSTR)167);
-    pFindMRUData    = (void*)GetProcAddress(hComctl32,(LPCSTR)169);
-    pCreateMRUListW = (void*)GetProcAddress(hComctl32,(LPCSTR)400);
-    pEnumMRUListW   = (void*)GetProcAddress(hComctl32,(LPCSTR)403);
-    pCreateMRUListLazyW = (void*)GetProcAddress(hComctl32,(LPCSTR)404);
+    hComctl32 = LoadLibraryA("comctl32.dll");
+
+#define X2(f, ord) p##f = (void*)GetProcAddress(hComctl32, (const char *)ord);
+    X2(CreateMRUListA, 151);
+    X2(FreeMRUList, 152);
+    X2(AddMRUStringA, 153);
+    X2(EnumMRUListA, 154);
+    X2(CreateMRUListLazyA, 157);
+    X2(AddMRUData, 167);
+    X2(FindMRUData, 169);
+    X2(CreateMRUListW, 400);
+    X2(EnumMRUListW, 403);
+    X2(CreateMRUListLazyW, 404);
+#undef X2
 }
 
 /* Based on RegDeleteTreeW from dlls/advapi32/registry.c */
@@ -705,13 +709,11 @@ static void test_CreateMRUListLazyW(void)
 
 START_TEST(mru)
 {
-    hComctl32 = GetModuleHandleA("comctl32.dll");
-
     delete_reg_entries();
     if (!create_reg_entries())
         return;
 
-    InitPointers();
+    init_functions();
 
     test_MRUListA();
     test_CreateMRUListLazyA();
diff --git a/dlls/comctl32/tests/pager.c b/dlls/comctl32/tests/pager.c
index a9409eac08..0da396cdd1 100644
--- a/dlls/comctl32/tests/pager.c
+++ b/dlls/comctl32/tests/pager.c
@@ -339,7 +339,6 @@ START_TEST(pager)
 
     pSetWindowSubclass = (void*)GetProcAddress(mod, (LPSTR)410);
 
-    InitCommonControls();
     init_msg_sequences(sequences, NUM_MSG_SEQUENCES);
 
     parent_wnd = create_parent_window();
diff --git a/dlls/comctl32/tests/progress.c b/dlls/comctl32/tests/progress.c
index 7f69c35232..bc7284b78d 100644
--- a/dlls/comctl32/tests/progress.c
+++ b/dlls/comctl32/tests/progress.c
@@ -94,24 +94,10 @@ static void update_window(HWND hWnd)
 
 static void init(void)
 {
-    HMODULE hComctl32;
-    BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*);
     WNDCLASSA wc;
     RECT rect;
     BOOL ret;
 
-    hComctl32 = GetModuleHandleA("comctl32.dll");
-    pInitCommonControlsEx = (void*)GetProcAddress(hComctl32, "InitCommonControlsEx");
-    if (pInitCommonControlsEx)
-    {
-        INITCOMMONCONTROLSEX iccex;
-        iccex.dwSize = sizeof(iccex);
-        iccex.dwICC  = ICC_PROGRESS_CLASS;
-        pInitCommonControlsEx(&iccex);
-    }
-    else
-        InitCommonControls();
-  
     wc.style = CS_HREDRAW | CS_VREDRAW;
     wc.cbClsExtra = 0;
     wc.cbWndExtra = 0;
diff --git a/dlls/comctl32/tests/propsheet.c b/dlls/comctl32/tests/propsheet.c
index ec53e6bc7c..2a4afaa51e 100644
--- a/dlls/comctl32/tests/propsheet.c
+++ b/dlls/comctl32/tests/propsheet.c
@@ -34,6 +34,10 @@ static LONG active_page = -1;
 
 #define IDC_APPLY_BUTTON 12321
 
+static HPROPSHEETPAGE (WINAPI *pCreatePropertySheetPageA)(const PROPSHEETPAGEA *desc);
+static HPROPSHEETPAGE (WINAPI *pCreatePropertySheetPageW)(const PROPSHEETPAGEW *desc);
+static BOOL (WINAPI *pDestroyPropertySheetPage)(HPROPSHEETPAGE proppage);
+static INT_PTR (WINAPI *pPropertySheetA)(const PROPSHEETHEADERA *header);
 
 static void detect_locale(void)
 {
@@ -141,7 +145,7 @@ static void test_title(void)
     psp.pfnDlgProc = page_dlg_proc;
     psp.lParam = 0;
 
-    hpsp[0] = CreatePropertySheetPageA(&psp);
+    hpsp[0] = pCreatePropertySheetPageA(&psp);
 
     memset(&psh, 0, sizeof(psh));
     psh.dwSize = PROPSHEETHEADERA_V1_SIZE;
@@ -152,7 +156,7 @@ static void test_title(void)
     U3(psh).phpage = hpsp;
     psh.pfnCallback = sheet_callback;
 
-    hdlg = (HWND)PropertySheetA(&psh);
+    hdlg = (HWND)pPropertySheetA(&psh);
     ok(hdlg != INVALID_HANDLE_VALUE, "got invalid handle value %p\n", hdlg);
 
     style = GetWindowLongA(hdlg, GWL_STYLE);
@@ -180,7 +184,7 @@ static void test_nopage(void)
     psp.pfnDlgProc = page_dlg_proc;
     psp.lParam = 0;
 
-    hpsp[0] = CreatePropertySheetPageA(&psp);
+    hpsp[0] = pCreatePropertySheetPageA(&psp);
 
     memset(&psh, 0, sizeof(psh));
     psh.dwSize = PROPSHEETHEADERA_V1_SIZE;
@@ -191,7 +195,7 @@ static void test_nopage(void)
     U3(psh).phpage = hpsp;
     psh.pfnCallback = sheet_callback;
 
-    hdlg = (HWND)PropertySheetA(&psh);
+    hdlg = (HWND)pPropertySheetA(&psh);
     ok(hdlg != INVALID_HANDLE_VALUE, "got invalid handle value %p\n", hdlg);
 
     ShowWindow(hdlg,SW_NORMAL);
@@ -260,7 +264,7 @@ static void test_disableowner(void)
     psp.pfnDlgProc = NULL;
     psp.lParam = 0;
 
-    hpsp[0] = CreatePropertySheetPageA(&psp);
+    hpsp[0] = pCreatePropertySheetPageA(&psp);
 
     memset(&psh, 0, sizeof(psh));
     psh.dwSize = PROPSHEETHEADERA_V1_SIZE;
@@ -271,7 +275,7 @@ static void test_disableowner(void)
     U3(psh).phpage = hpsp;
     psh.pfnCallback = disableowner_callback;
 
-    p = PropertySheetA(&psh);
+    p = pPropertySheetA(&psh);
     todo_wine
     ok(p == 0, "Expected 0, got %ld\n", p);
     ok(IsWindowEnabled(parenthwnd) != 0, "parent window should be enabled\n");
@@ -357,25 +361,25 @@ static void test_wiznavigation(void)
     psp[0].hInstance = GetModuleHandleA(NULL);
     U(psp[0]).pszTemplate = (LPCSTR)MAKEINTRESOURCE(IDD_PROP_PAGE_INTRO);
     psp[0].pfnDlgProc = nav_page_proc;
-    hpsp[0] = CreatePropertySheetPageA(&psp[0]);
+    hpsp[0] = pCreatePropertySheetPageA(&psp[0]);
 
     psp[1].dwSize = sizeof(PROPSHEETPAGEA);
     psp[1].hInstance = GetModuleHandleA(NULL);
     U(psp[1]).pszTemplate = (LPCSTR)MAKEINTRESOURCE(IDD_PROP_PAGE_EDIT);
     psp[1].pfnDlgProc = nav_page_proc;
-    hpsp[1] = CreatePropertySheetPageA(&psp[1]);
+    hpsp[1] = pCreatePropertySheetPageA(&psp[1]);
 
     psp[2].dwSize = sizeof(PROPSHEETPAGEA);
     psp[2].hInstance = GetModuleHandleA(NULL);
     U(psp[2]).pszTemplate = (LPCSTR)MAKEINTRESOURCE(IDD_PROP_PAGE_RADIO);
     psp[2].pfnDlgProc = nav_page_proc;
-    hpsp[2] = CreatePropertySheetPageA(&psp[2]);
+    hpsp[2] = pCreatePropertySheetPageA(&psp[2]);
 
     psp[3].dwSize = sizeof(PROPSHEETPAGEA);
     psp[3].hInstance = GetModuleHandleA(NULL);
     U(psp[3]).pszTemplate = (LPCSTR)MAKEINTRESOURCE(IDD_PROP_PAGE_EXIT);
     psp[3].pfnDlgProc = nav_page_proc;
-    hpsp[3] = CreatePropertySheetPageA(&psp[3]);
+    hpsp[3] = pCreatePropertySheetPageA(&psp[3]);
 
     /* set up the property sheet dialog */
     memset(&psh, 0, sizeof(psh));
@@ -385,7 +389,7 @@ static void test_wiznavigation(void)
     psh.nPages = 4;
     psh.hwndParent = GetDesktopWindow();
     U3(psh).phpage = hpsp;
-    hdlg = (HWND)PropertySheetA(&psh);
+    hdlg = (HWND)pPropertySheetA(&psh);
     ok(hdlg != INVALID_HANDLE_VALUE, "got invalid handle %p\n", hdlg);
 
     ok(active_page == 0, "Active page should be 0. Is: %d\n", active_page);
@@ -480,7 +484,7 @@ static void test_buttons(void)
     psp.pfnDlgProc = page_dlg_proc;
     psp.lParam = 0;
 
-    hpsp[0] = CreatePropertySheetPageA(&psp);
+    hpsp[0] = pCreatePropertySheetPageA(&psp);
 
     memset(&psh, 0, sizeof(psh));
     psh.dwSize = PROPSHEETHEADERA_V1_SIZE;
@@ -491,7 +495,7 @@ static void test_buttons(void)
     U3(psh).phpage = hpsp;
     psh.pfnCallback = sheet_callback;
 
-    hdlg = (HWND)PropertySheetA(&psh);
+    hdlg = (HWND)pPropertySheetA(&psh);
     ok(hdlg != INVALID_HANDLE_VALUE, "got null handle\n");
 
     /* OK button */
@@ -587,7 +591,7 @@ static void test_custom_default_button(void)
     add_button_has_been_pressed = FALSE;
 
     /* Create the modeless property sheet. */
-    hdlg = (HWND)PropertySheetA(&psh);
+    hdlg = (HWND)pPropertySheetA(&psh);
     ok(hdlg != INVALID_HANDLE_VALUE, "Cannot create the property sheet\n");
 
     /* Set the Add button as the default button. */
@@ -798,7 +802,7 @@ static void test_messages(void)
     psp.pfnDlgProc = page_dlg_proc_messages;
     psp.lParam = 0;
 
-    hpsp[0] = CreatePropertySheetPageA(&psp);
+    hpsp[0] = pCreatePropertySheetPageA(&psp);
 
     memset(&psh, 0, sizeof(psh));
     psh.dwSize = PROPSHEETHEADERA_V1_SIZE;
@@ -810,7 +814,7 @@ static void test_messages(void)
     U3(psh).phpage = hpsp;
     psh.pfnCallback = sheet_callback_messages;
 
-    hdlg = (HWND)PropertySheetA(&psh);
+    hdlg = (HWND)pPropertySheetA(&psh);
     ok(hdlg != INVALID_HANDLE_VALUE, "got invalid handle %p\n", hdlg);
 
     ShowWindow(hdlg,SW_NORMAL);
@@ -839,15 +843,15 @@ static void test_PSM_ADDPAGE(void)
     psp.lParam = 0;
 
     /* multiple pages with the same data */
-    hpsp[0] = CreatePropertySheetPageA(&psp);
-    hpsp[1] = CreatePropertySheetPageA(&psp);
-    hpsp[2] = CreatePropertySheetPageA(&psp);
+    hpsp[0] = pCreatePropertySheetPageA(&psp);
+    hpsp[1] = pCreatePropertySheetPageA(&psp);
+    hpsp[2] = pCreatePropertySheetPageA(&psp);
 
     U(psp).pszTemplate = (LPCSTR)MAKEINTRESOURCE(IDD_PROP_PAGE_ERROR);
-    hpsp[3] = CreatePropertySheetPageA(&psp);
+    hpsp[3] = pCreatePropertySheetPageA(&psp);
 
     psp.dwFlags = PSP_PREMATURE;
-    hpsp[4] = CreatePropertySheetPageA(&psp);
+    hpsp[4] = pCreatePropertySheetPageA(&psp);
 
     memset(&psh, 0, sizeof(psh));
     psh.dwSize = PROPSHEETHEADERA_V1_SIZE;
@@ -857,7 +861,7 @@ static void test_PSM_ADDPAGE(void)
     psh.hwndParent = GetDesktopWindow();
     U3(psh).phpage = hpsp;
 
-    hdlg = (HWND)PropertySheetA(&psh);
+    hdlg = (HWND)pPropertySheetA(&psh);
     ok(hdlg != INVALID_HANDLE_VALUE, "got invalid handle %p\n", hdlg);
 
     /* add pages one by one */
@@ -906,7 +910,7 @@ if (0)
     r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0);
     ok(r == 3, "got %d\n", r);
 
-    DestroyPropertySheetPage(hpsp[4]);
+    pDestroyPropertySheetPage(hpsp[4]);
     DestroyWindow(hdlg);
 }
 
@@ -929,15 +933,15 @@ static void test_PSM_INSERTPAGE(void)
     psp.lParam = 0;
 
     /* multiple pages with the same data */
-    hpsp[0] = CreatePropertySheetPageA(&psp);
-    hpsp[1] = CreatePropertySheetPageA(&psp);
-    hpsp[2] = CreatePropertySheetPageA(&psp);
+    hpsp[0] = pCreatePropertySheetPageA(&psp);
+    hpsp[1] = pCreatePropertySheetPageA(&psp);
+    hpsp[2] = pCreatePropertySheetPageA(&psp);
 
     U(psp).pszTemplate = (LPCSTR)MAKEINTRESOURCE(IDD_PROP_PAGE_ERROR);
-    hpsp[3] = CreatePropertySheetPageA(&psp);
+    hpsp[3] = pCreatePropertySheetPageA(&psp);
 
     psp.dwFlags = PSP_PREMATURE;
-    hpsp[4] = CreatePropertySheetPageA(&psp);
+    hpsp[4] = pCreatePropertySheetPageA(&psp);
 
     memset(&psh, 0, sizeof(psh));
     psh.dwSize = PROPSHEETHEADERA_V1_SIZE;
@@ -947,7 +951,7 @@ static void test_PSM_INSERTPAGE(void)
     psh.hwndParent = GetDesktopWindow();
     U3(psh).phpage = hpsp;
 
-    hdlg = (HWND)PropertySheetA(&psh);
+    hdlg = (HWND)pPropertySheetA(&psh);
     ok(hdlg != INVALID_HANDLE_VALUE, "got invalid handle %p\n", hdlg);
 
     /* add pages one by one */
@@ -1000,7 +1004,7 @@ if (0)
     r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0);
     ok(r == 3, "got %d\n", r);
 
-    DestroyPropertySheetPage(hpsp[4]);
+    pDestroyPropertySheetPage(hpsp[4]);
     DestroyWindow(hdlg);
 }
 
@@ -1090,7 +1094,7 @@ static void test_CreatePropertySheetPage(void)
     for (page.u.pageA.dwSize = PROPSHEETPAGEA_V1_SIZE - 1; page.u.pageA.dwSize <= PROPSHEETPAGEA_V4_SIZE + 1; page.u.pageA.dwSize++)
     {
         page.addref_called = 0;
-        hpsp = CreatePropertySheetPageA(&page.u.pageA);
+        hpsp = pCreatePropertySheetPageA(&page.u.pageA);
 
         if (page.u.pageA.dwSize < PROPSHEETPAGEA_V1_SIZE)
             ok(hpsp == NULL, "Expected failure, size %u\n", page.u.pageA.dwSize);
@@ -1103,7 +1107,7 @@ static void test_CreatePropertySheetPage(void)
         if (hpsp)
         {
             page.release_called = 0;
-            ret = DestroyPropertySheetPage(hpsp);
+            ret = pDestroyPropertySheetPage(hpsp);
             ok(ret, "Failed to destroy a page\n");
             ok(page.release_called == 1, "Expected RELEASE callback message\n");
         }
@@ -1119,7 +1123,7 @@ static void test_CreatePropertySheetPage(void)
     for (page.u.pageW.dwSize = PROPSHEETPAGEW_V1_SIZE - 1; page.u.pageW.dwSize <= PROPSHEETPAGEW_V4_SIZE + 1; page.u.pageW.dwSize++)
     {
         page.addref_called = 0;
-        hpsp = CreatePropertySheetPageW(&page.u.pageW);
+        hpsp = pCreatePropertySheetPageW(&page.u.pageW);
 
         if (page.u.pageW.dwSize < PROPSHEETPAGEW_V1_SIZE)
             ok(hpsp == NULL, "Expected failure, size %u\n", page.u.pageW.dwSize);
@@ -1132,13 +1136,25 @@ static void test_CreatePropertySheetPage(void)
         if (hpsp)
         {
             page.release_called = 0;
-            ret = DestroyPropertySheetPage(hpsp);
+            ret = pDestroyPropertySheetPage(hpsp);
             ok(ret, "Failed to destroy a page\n");
             ok(page.release_called == 1, "Expected RELEASE callback message\n");
         }
     }
 }
 
+static void init_functions(void)
+{
+    HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
+
+#define X(f) p##f = (void*)GetProcAddress(hComCtl32, #f);
+    X(CreatePropertySheetPageA);
+    X(CreatePropertySheetPageW);
+    X(DestroyPropertySheetPage);
+    X(PropertySheetA);
+#undef X
+}
+
 START_TEST(propsheet)
 {
     detect_locale();
@@ -1150,6 +1166,8 @@ START_TEST(propsheet)
         SetProcessDefaultLayout(LAYOUT_RTL);
     }
 
+    init_functions();
+
     test_title();
     test_nopage();
     test_disableowner();
diff --git a/dlls/comctl32/tests/rebar.c b/dlls/comctl32/tests/rebar.c
index 6430ba2b61..2ff4cebdf9 100644
--- a/dlls/comctl32/tests/rebar.c
+++ b/dlls/comctl32/tests/rebar.c
@@ -30,6 +30,9 @@
 
 #include "wine/test.h"
 
+static BOOL (WINAPI *pImageList_Destroy)(HIMAGELIST);
+static HIMAGELIST (WINAPI *pImageList_LoadImageA)(HINSTANCE, LPCSTR, int, int, COLORREF, UINT, UINT);
+
 static RECT height_change_notify_rect;
 static HWND hMainWnd;
 static int system_font_height;
@@ -577,7 +580,7 @@ static void test_layout(void)
     check_sizes();
 
     /* an image will increase the band height */
-    himl = ImageList_LoadImageA(GetModuleHandleA("comctl32"), MAKEINTRESOURCEA(121), 24, 2,
+    himl = pImageList_LoadImageA(GetModuleHandleA("comctl32"), MAKEINTRESOURCEA(121), 24, 2,
             CLR_NONE, IMAGE_BITMAP, LR_DEFAULTCOLOR);
     ri.cbSize = sizeof(ri);
     ri.fMask = RBIM_IMAGELIST;
@@ -658,7 +661,7 @@ static void test_layout(void)
 
     rbsize_results_free();
     DestroyWindow(hRebar);
-    ImageList_Destroy(himl);
+    pImageList_Destroy(himl);
 }
 
 #if 0       /* use this to generate more tests */
@@ -1125,26 +1128,22 @@ static void test_notification(void)
     DestroyWindow(rebar);
 }
 
+static void init_functions(void)
+{
+    HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
+
+#define X(f) p##f = (void*)GetProcAddress(hComCtl32, #f);
+    X(ImageList_Destroy);
+    X(ImageList_LoadImageA);
+#undef X
+}
+
 START_TEST(rebar)
 {
-    HMODULE hComctl32;
-    BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*);
-    INITCOMMONCONTROLSEX iccex;
     MSG msg;
 
     init_system_font_height();
-
-    /* LoadLibrary is needed. This file has no reference to functions in comctl32 */
-    hComctl32 = LoadLibraryA("comctl32.dll");
-    pInitCommonControlsEx = (void*)GetProcAddress(hComctl32, "InitCommonControlsEx");
-    if (!pInitCommonControlsEx)
-    {
-        win_skip("InitCommonControlsEx() is missing. Skipping the tests\n");
-        return;
-    }
-    iccex.dwSize = sizeof(iccex);
-    iccex.dwICC = ICC_COOL_CLASSES;
-    pInitCommonControlsEx(&iccex);
+    init_functions();
 
     hMainWnd = create_parent_window();
 
@@ -1169,6 +1168,4 @@ out:
         DispatchMessageA(&msg);
     }
     DestroyWindow(hMainWnd);
-
-    FreeLibrary(hComctl32);
 }
diff --git a/dlls/comctl32/tests/status.c b/dlls/comctl32/tests/status.c
index a394beb42a..78cbbb37ba 100644
--- a/dlls/comctl32/tests/status.c
+++ b/dlls/comctl32/tests/status.c
@@ -593,8 +593,6 @@ START_TEST(status)
       226+GetSystemMetrics(SM_CYCAPTION)+2*GetSystemMetrics(SM_CYSIZEFRAME),
       NULL, NULL, GetModuleHandleA(NULL), 0);
 
-    InitCommonControls();
-
     register_subclass();
 
     test_status_control();
diff --git a/dlls/comctl32/tests/subclass.c b/dlls/comctl32/tests/subclass.c
index 720c68e28d..abe63a1547 100644
--- a/dlls/comctl32/tests/subclass.c
+++ b/dlls/comctl32/tests/subclass.c
@@ -286,7 +286,7 @@ static BOOL init_function_pointers(void)
     HMODULE hmod;
     void *ptr;
 
-    hmod = GetModuleHandleA("comctl32.dll");
+    hmod = LoadLibraryA("comctl32.dll");
     ok(hmod != NULL, "got %p\n", hmod);
 
     /* Functions have to be loaded by ordinal. Only XP and W2K3 export
diff --git a/dlls/comctl32/tests/tab.c b/dlls/comctl32/tests/tab.c
index 72165c8100..0bfbb38a58 100644
--- a/dlls/comctl32/tests/tab.c
+++ b/dlls/comctl32/tests/tab.c
@@ -40,6 +40,11 @@
 
 #define TabWidthPadded(padd_x, num) (DEFAULT_MIN_TAB_WIDTH - (TAB_PADDING_X - (padd_x)) * num)
 
+static HIMAGELIST (WINAPI *pImageList_Create)(INT,INT,UINT,INT,INT);
+static BOOL (WINAPI *pImageList_Destroy)(HIMAGELIST);
+static INT (WINAPI *pImageList_GetImageCount)(HIMAGELIST);
+static INT (WINAPI *pImageList_ReplaceIcon)(HIMAGELIST,INT,HICON);
+
 static void CheckSize(HWND hwnd, INT width, INT height, const char *msg, int line)
 {
     RECT r;
@@ -470,7 +475,7 @@ static void test_tab(INT nMinTabWidth)
 {
     HWND hwTab;
     RECT rTab;
-    HIMAGELIST himl = ImageList_Create(21, 21, ILC_COLOR, 3, 4);
+    HIMAGELIST himl = pImageList_Create(21, 21, ILC_COLOR, 3, 4);
     SIZE size;
     HDC hdc;
     HFONT hOldFont;
@@ -608,7 +613,7 @@ static void test_tab(INT nMinTabWidth)
 
     DestroyWindow (hwTab);
 
-    ImageList_Destroy(himl);
+    pImageList_Destroy(himl);
 }
 
 static void test_width(void)
@@ -1165,12 +1170,12 @@ static void test_removeimage(void)
     INT i;
     TCITEMA item;
     HICON hicon;
-    HIMAGELIST himl = ImageList_Create(16, 16, ILC_COLOR, 3, 4);
+    HIMAGELIST himl = pImageList_Create(16, 16, ILC_COLOR, 3, 4);
 
     hicon = CreateIcon(NULL, 16, 16, 1, 1, bits, bits);
-    ImageList_AddIcon(himl, hicon);
-    ImageList_AddIcon(himl, hicon);
-    ImageList_AddIcon(himl, hicon);
+    pImageList_ReplaceIcon(himl, -1, hicon);
+    pImageList_ReplaceIcon(himl, -1, hicon);
+    pImageList_ReplaceIcon(himl, -1, hicon);
 
     hwTab = create_tabcontrol(TCS_FIXEDWIDTH, TCIF_TEXT|TCIF_IMAGE);
     SendMessageA(hwTab, TCM_SETIMAGELIST, 0, (LPARAM)himl);
@@ -1185,7 +1190,8 @@ static void test_removeimage(void)
 
     /* remove image middle image */
     SendMessageA(hwTab, TCM_REMOVEIMAGE, 1, 0);
-    expect(2, ImageList_GetImageCount(himl));
+    i = pImageList_GetImageCount(himl);
+    ok(i == 2, "Unexpected image count %d.\n", i);
     item.iImage = -1;
     SendMessageA(hwTab, TCM_GETITEMA, 0, (LPARAM)&item);
     expect(0, item.iImage);
@@ -1197,7 +1203,8 @@ static void test_removeimage(void)
     expect(1, item.iImage);
     /* remove first image */
     SendMessageA(hwTab, TCM_REMOVEIMAGE, 0, 0);
-    expect(1, ImageList_GetImageCount(himl));
+    i = pImageList_GetImageCount(himl);
+    ok(i == 1, "Unexpected image count %d.\n", i);
     item.iImage = 0;
     SendMessageA(hwTab, TCM_GETITEMA, 0, (LPARAM)&item);
     expect(-1, item.iImage);
@@ -1209,7 +1216,8 @@ static void test_removeimage(void)
     expect(0, item.iImage);
     /* remove the last one */
     SendMessageA(hwTab, TCM_REMOVEIMAGE, 0, 0);
-    expect(0, ImageList_GetImageCount(himl));
+    i = pImageList_GetImageCount(himl);
+    ok(i == 0, "Unexpected image count %d.\n", i);
     for(i = 0; i < 3; i++) {
         item.iImage = 0;
         SendMessageA(hwTab, TCM_GETITEMA, i, (LPARAM)&item);
@@ -1217,7 +1225,7 @@ static void test_removeimage(void)
     }
 
     DestroyWindow(hwTab);
-    ImageList_Destroy(himl);
+    pImageList_Destroy(himl);
     DestroyIcon(hicon);
 }
 
@@ -1423,6 +1431,18 @@ static void test_create(void)
     }
 }
 
+static void init_functions(void)
+{
+    HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
+
+#define X(f) p##f = (void*)GetProcAddress(hComCtl32, #f);
+    X(ImageList_Create);
+    X(ImageList_Destroy);
+    X(ImageList_GetImageCount);
+    X(ImageList_ReplaceIcon);
+#undef X
+}
+
 START_TEST(tab)
 {
     LOGFONTA logfont;
@@ -1434,7 +1454,7 @@ START_TEST(tab)
     logfont.lfCharSet = ANSI_CHARSET;
     hFont = CreateFontIndirectA(&logfont);
 
-    InitCommonControls();
+    init_functions();
 
     test_width();
 
diff --git a/dlls/comctl32/tests/toolbar.c b/dlls/comctl32/tests/toolbar.c
index 2c1b789484..38b8339378 100644
--- a/dlls/comctl32/tests/toolbar.c
+++ b/dlls/comctl32/tests/toolbar.c
@@ -37,6 +37,13 @@
 #define PARENT_SEQ_INDEX       0
 #define NUM_MSG_SEQUENCES      1
 
+static HWND (WINAPI *pCreateToolbarEx)(HWND, DWORD, UINT, INT, HINSTANCE, UINT_PTR, const TBBUTTON *,
+    INT, INT, INT, INT, INT, UINT);
+static BOOL (WINAPI *pImageList_Destroy)(HIMAGELIST);
+static INT (WINAPI *pImageList_GetImageCount)(HIMAGELIST);
+static BOOL (WINAPI *pImageList_GetIconSize)(HIMAGELIST, int *, int *);
+static HIMAGELIST (WINAPI *pImageList_LoadImageA)(HINSTANCE, LPCSTR, int, int, COLORREF, UINT, UINT);
+
 static struct msg_sequence *sequences[NUM_MSG_SEQUENCES];
 
 static HWND hMainWnd;
@@ -376,7 +383,7 @@ static void basic_test(void)
     MakeButton(buttons+3, 1003, TBSTYLE_SEP|TBSTYLE_GROUP, 0);
     MakeButton(buttons+6, 1006, TBSTYLE_SEP, 0);
 
-    hToolbar = CreateToolbarEx(hMainWnd,
+    hToolbar = pCreateToolbarEx(hMainWnd,
         WS_VISIBLE | WS_CLIPCHILDREN | CCS_TOP |
         WS_CHILD | TBSTYLE_LIST,
         100,
@@ -482,8 +489,8 @@ static void add_128x15_bitmap(HWND hToolbar, int nCmds)
     HIMAGELIST himl = (HIMAGELIST)SendMessageA(hToolbar, TB_GETIMAGELIST, 0, 0); \
     ok(himl != NULL, "No image list\n"); \
     if (himl != NULL) {\
-        ok(ImageList_GetImageCount(himl) == count, "Images count mismatch - %d vs %d\n", count, ImageList_GetImageCount(himl)); \
-        ImageList_GetIconSize(himl, &cx, &cy); \
+        ok(pImageList_GetImageCount(himl) == count, "Images count mismatch - %d vs %d\n", count, pImageList_GetImageCount(himl)); \
+        pImageList_GetIconSize(himl, &cx, &cy); \
         ok(cx == dx && cy == dy, "Icon size mismatch - %dx%d vs %dx%d\n", dx, dy, cx, cy); \
     } \
 }
@@ -515,11 +522,11 @@ static void test_add_bitmap(void)
         himl = (HIMAGELIST)SendMessageA(hToolbar, TB_GETIMAGELIST, 0, 0);
         ok(himl != NULL, "Got %p\n", himl);
 
-        ret = ImageList_GetIconSize(himl, &cx, &cy);
+        ret = pImageList_GetIconSize(himl, &cx, &cy);
         ok(ret, "Got %d\n", ret);
         ok(cx == cy, "Got %d x %d\n", cx, cy);
 
-        count = ImageList_GetImageCount(himl);
+        count = pImageList_GetImageCount(himl);
 
         /* Image count */
         switch (id)
@@ -688,7 +695,7 @@ static void test_add_bitmap(void)
 
     /* the control can add bitmaps to an existing image list */
     rebuild_toolbar(&hToolbar);
-    himl = ImageList_LoadImageA(GetModuleHandleA(NULL), (LPCSTR)MAKEINTRESOURCE(IDB_BITMAP_80x15),
+    himl = pImageList_LoadImageA(GetModuleHandleA(NULL), (LPCSTR)MAKEINTRESOURCE(IDB_BITMAP_80x15),
                                 20, 2, CLR_NONE, IMAGE_BITMAP, LR_DEFAULTCOLOR);
     ok(himl != NULL, "failed to create imagelist\n");
     ok(SendMessageA(hToolbar, TB_SETIMAGELIST, 0, (LPARAM)himl) == 0, "TB_SETIMAGELIST failed\n");
@@ -709,7 +716,7 @@ static void test_add_bitmap(void)
     addbmp.hInst = HINST_COMMCTRL;
     addbmp.nID = IDB_STD_SMALL_COLOR;
     rebuild_toolbar(&hToolbar);
-    ImageList_Destroy(himl);
+    pImageList_Destroy(himl);
 
     ok(SendMessageA(hToolbar, TB_ADDBITMAP, 1, (LPARAM)&addbmp) == 0, "TB_ADDBITMAP - unexpected return\n");
     CHECK_IMAGELIST(15, 16, 16);
@@ -1506,14 +1513,14 @@ static void test_sizes(void)
 
     /* TB_SETIMAGELIST always changes the height but the width only if necessary */
     SendMessageA(hToolbar, TB_SETBUTTONSIZE, 0, MAKELONG(100, 100));
-    himl = ImageList_LoadImageA(GetModuleHandleA(NULL), (LPCSTR)MAKEINTRESOURCE(IDB_BITMAP_80x15),
+    himl = pImageList_LoadImageA(GetModuleHandleA(NULL), (LPCSTR)MAKEINTRESOURCE(IDB_BITMAP_80x15),
                                 20, 2, CLR_NONE, IMAGE_BITMAP, LR_DEFAULTCOLOR);
     ok(SendMessageA(hToolbar, TB_SETIMAGELIST, 0, (LPARAM)himl) == 0, "TB_SETIMAGELIST failed\n");
     check_button_size(hToolbar, 100, 21);
     SendMessageA(hToolbar, TB_SETBUTTONSIZE, 0, MAKELONG(100, 100));
     check_button_size(hToolbar, 100, 100);
     /* But there are no update when we change imagelist, and image sizes are the same */
-    himl2 = ImageList_LoadImageA(GetModuleHandleA(NULL), (LPCSTR)MAKEINTRESOURCE(IDB_BITMAP_128x15),
+    himl2 = pImageList_LoadImageA(GetModuleHandleA(NULL), (LPCSTR)MAKEINTRESOURCE(IDB_BITMAP_128x15),
                                  20, 2, CLR_NONE, IMAGE_BITMAP, LR_DEFAULTCOLOR);
     ok(SendMessageA(hToolbar, TB_SETIMAGELIST, 0, (LRESULT)himl2) == (LRESULT)himl, "TB_SETIMAGELIST failed\n");
     check_button_size(hToolbar, 100, 100);
@@ -1538,8 +1545,8 @@ static void test_sizes(void)
     check_sizes_todo(0x30);     /* some small problems with BTNS_AUTOSIZE button sizes */
 
     rebuild_toolbar(&hToolbar);
-    ImageList_Destroy(himl);
-    ImageList_Destroy(himl2);
+    pImageList_Destroy(himl);
+    pImageList_Destroy(himl2);
 
     SendMessageA(hToolbar, TB_ADDBUTTONSA, 1, (LPARAM)&buttons3[3]);
     check_button_size(hToolbar, 7 + string_width(STRING2), 23 + fontheight);
@@ -1823,43 +1830,43 @@ static void test_createtoolbarex(void)
     TBBUTTON btns[3];
     ZeroMemory(&btns, sizeof(btns));
 
-    hToolbar = CreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandleA(NULL), IDB_BITMAP_128x15, btns,
+    hToolbar = pCreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandleA(NULL), IDB_BITMAP_128x15, btns,
         3, 20, 20, 16, 16, sizeof(TBBUTTON));
     CHECK_IMAGELIST(16, 20, 20);
     compare((int)SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0x1a001b, "%x");
     DestroyWindow(hToolbar);
 
-    hToolbar = CreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandleA(NULL), IDB_BITMAP_128x15, btns,
+    hToolbar = pCreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandleA(NULL), IDB_BITMAP_128x15, btns,
         3, 4, 4, 16, 16, sizeof(TBBUTTON));
     CHECK_IMAGELIST(32, 4, 4);
     compare((int)SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0xa000b, "%x");
     DestroyWindow(hToolbar);
 
-    hToolbar = CreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandleA(NULL), IDB_BITMAP_128x15, btns,
+    hToolbar = pCreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandleA(NULL), IDB_BITMAP_128x15, btns,
         3, 0, 8, 12, 12, sizeof(TBBUTTON));
     CHECK_IMAGELIST(16, 12, 12);
     compare((int)SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0x120013, "%x");
     DestroyWindow(hToolbar);
 
-    hToolbar = CreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandleA(NULL), IDB_BITMAP_128x15, btns,
+    hToolbar = pCreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandleA(NULL), IDB_BITMAP_128x15, btns,
         3, -1, 8, 12, 12, sizeof(TBBUTTON));
     CHECK_IMAGELIST(16, 12, 8);
     compare((int)SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0xe0013, "%x");
     DestroyWindow(hToolbar);
 
-    hToolbar = CreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandleA(NULL), IDB_BITMAP_128x15, btns,
+    hToolbar = pCreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandleA(NULL), IDB_BITMAP_128x15, btns,
         3, -1, 8, -1, 12, sizeof(TBBUTTON));
     CHECK_IMAGELIST(16, 16, 8);
     compare((int)SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0xe0017, "%x");
     DestroyWindow(hToolbar);
 
-    hToolbar = CreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandleA(NULL), IDB_BITMAP_128x15, btns,
+    hToolbar = pCreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandleA(NULL), IDB_BITMAP_128x15, btns,
         3, 0, 0, 12, -1, sizeof(TBBUTTON));
     CHECK_IMAGELIST(16, 12, 16);
     compare((int)SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0x160013, "%x");
     DestroyWindow(hToolbar);
 
-    hToolbar = CreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandleA(NULL), IDB_BITMAP_128x15, btns,
+    hToolbar = pCreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandleA(NULL), IDB_BITMAP_128x15, btns,
         3, 0, 0, 0, 12, sizeof(TBBUTTON));
     CHECK_IMAGELIST(16, 16, 16);
     compare((int)SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0x160017, "%x");
@@ -1928,7 +1935,7 @@ static void test_setrows(void)
         MakeButton(buttons+i, 1000+i, TBSTYLE_FLAT | TBSTYLE_CHECKGROUP, 0);
 
     /* Test 1 - 9 buttons */
-    hToolbar = CreateToolbarEx(hMainWnd,
+    hToolbar = pCreateToolbarEx(hMainWnd,
         WS_VISIBLE | WS_CLIPCHILDREN | WS_CHILD | CCS_NORESIZE | CCS_NOPARENTALIGN
         | CCS_NOMOVEY | CCS_TOP,
         0,
@@ -2047,7 +2054,7 @@ static void test_get_set_style(void)
     MakeButton(buttons+3, 1003, TBSTYLE_SEP|TBSTYLE_GROUP, 0);
     MakeButton(buttons+6, 1006, TBSTYLE_SEP, 0);
 
-    hToolbar = CreateToolbarEx(hMainWnd,
+    hToolbar = pCreateToolbarEx(hMainWnd,
         WS_VISIBLE | WS_CLIPCHILDREN | CCS_TOP |
         WS_CHILD | TBSTYLE_LIST,
         100,
@@ -2507,6 +2514,19 @@ static void test_imagelist(void)
     DestroyWindow(hwnd);
 }
 
+static void init_functions(void)
+{
+    HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
+
+#define X(f) p##f = (void*)GetProcAddress(hComCtl32, #f);
+    X(CreateToolbarEx);
+    X(ImageList_GetIconSize);
+    X(ImageList_GetImageCount);
+    X(ImageList_LoadImageA);
+    X(ImageList_Destroy);
+#undef X
+}
+
 START_TEST(toolbar)
 {
     WNDCLASSA wc;
@@ -2514,9 +2534,8 @@ START_TEST(toolbar)
     RECT rc;
 
     init_msg_sequences(sequences, NUM_MSG_SEQUENCES);
+    init_functions();
 
-    InitCommonControls();
-  
     wc.style = CS_HREDRAW | CS_VREDRAW;
     wc.cbClsExtra = 0;
     wc.cbWndExtra = 0;
diff --git a/dlls/comctl32/tests/tooltips.c b/dlls/comctl32/tests/tooltips.c
index be6ab400a0..7e82604376 100644
--- a/dlls/comctl32/tests/tooltips.c
+++ b/dlls/comctl32/tests/tooltips.c
@@ -1057,7 +1057,7 @@ static void test_margin(void)
 
 START_TEST(tooltips)
 {
-    InitCommonControls();
+    LoadLibraryA("comctl32.dll");
 
     test_create_tooltip();
     test_customdraw();
diff --git a/dlls/comctl32/tests/trackbar.c b/dlls/comctl32/tests/trackbar.c
index 9cc8b277ee..31845d10e0 100644
--- a/dlls/comctl32/tests/trackbar.c
+++ b/dlls/comctl32/tests/trackbar.c
@@ -1296,8 +1296,9 @@ static void test_create(void)
 
 START_TEST(trackbar)
 {
+    LoadLibraryA("comctl32.dll");
+
     init_msg_sequences(sequences, NUM_MSG_SEQUENCE);
-    InitCommonControls();
 
     /* create parent window */
     hWndParent = create_parent_window();
diff --git a/dlls/comctl32/tests/treeview.c b/dlls/comctl32/tests/treeview.c
index a014625a0a..e7568d05de 100644
--- a/dlls/comctl32/tests/treeview.c
+++ b/dlls/comctl32/tests/treeview.c
@@ -2668,25 +2668,11 @@ static void test_right_click(void)
 
 START_TEST(treeview)
 {
-    HMODULE hComctl32;
-    BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*);
     WNDCLASSA wc;
     MSG msg;
 
     ULONG_PTR ctx_cookie;
     HANDLE hCtx;
-  
-    hComctl32 = GetModuleHandleA("comctl32.dll");
-    pInitCommonControlsEx = (void*)GetProcAddress(hComctl32, "InitCommonControlsEx");
-    if (pInitCommonControlsEx)
-    {
-        INITCOMMONCONTROLSEX iccex;
-        iccex.dwSize = sizeof(iccex);
-        iccex.dwICC  = ICC_TREEVIEW_CLASSES;
-        pInitCommonControlsEx(&iccex);
-    }
-    else
-        InitCommonControls();
 
     init_msg_sequences(sequences, NUM_MSG_SEQUENCES);
     init_msg_sequences(item_sequence, 1);
diff --git a/dlls/comctl32/tests/updown.c b/dlls/comctl32/tests/updown.c
index 639e7802a9..f549c41583 100644
--- a/dlls/comctl32/tests/updown.c
+++ b/dlls/comctl32/tests/updown.c
@@ -63,6 +63,8 @@
 
 static HWND parent_wnd, g_edit;
 
+static HWND (WINAPI *pCreateUpDownControl)(DWORD, INT, INT, INT, INT,
+    HWND, INT, HINSTANCE, HWND, INT, INT, INT);
 static BOOL (WINAPI *pSetWindowSubclass)(HWND, SUBCLASSPROC, UINT_PTR, DWORD_PTR);
 
 static struct msg_sequence *sequences[NUM_MSG_SEQUENCES];
@@ -882,7 +884,7 @@ static void test_CreateUpDownControl(void)
     RECT rect;
 
     GetClientRect(parent_wnd, &rect);
-    updown = CreateUpDownControl(WS_CHILD | WS_BORDER | WS_VISIBLE,
+    updown = pCreateUpDownControl(WS_CHILD | WS_BORDER | WS_VISIBLE,
         0, 0, rect.right, rect.bottom, parent_wnd, 1, GetModuleHandleA(NULL), g_edit, 100, 10, 50);
     ok(updown != NULL, "Failed to create control.\n");
 
@@ -898,13 +900,22 @@ static void test_CreateUpDownControl(void)
     DestroyWindow(updown);
 }
 
-START_TEST(updown)
+static void init_functions(void)
 {
-    HMODULE mod = GetModuleHandleA("comctl32.dll");
+    HMODULE hComCtl32 = LoadLibraryA("comctl32.dll");
+
+#define X(f) p##f = (void*)GetProcAddress(hComCtl32, #f);
+#define X2(f, ord) p##f = (void*)GetProcAddress(hComCtl32, (const char *)ord);
+    X(CreateUpDownControl);
+    X2(SetWindowSubclass, 410);
+#undef X
+#undef X2
+}
 
-    pSetWindowSubclass = (void*)GetProcAddress(mod, (LPSTR)410);
+START_TEST(updown)
+{
+    init_functions();
 
-    InitCommonControls();
     init_msg_sequences(sequences, NUM_MSG_SEQUENCES);
 
     parent_wnd = create_parent_window();
-- 
2.15.1




More information about the wine-devel mailing list