Replaced most uses of the auto-generated glue code by explicit calls
to WOWCallback16Ex.

diff --git a/objects/dc.c b/objects/dc.c
index 4be1034..ae9d254 100644
--- a/objects/dc.c
+++ b/objects/dc.c
@@ -33,10 +33,6 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(dc);
 
-/* ### start build ### */
-extern WORD CALLBACK GDI_CallTo16_word_wwll(FARPROC16,WORD,WORD,LONG,LONG);
-/* ### stop build ### */
-
 static BOOL DC_DeleteObject( HGDIOBJ handle, void *obj );
 
 static const struct gdi_obj_funcs dc_funcs =
@@ -1147,14 +1143,24 @@
 /* relay function to call the 16-bit DC hook proc */
 static BOOL16 WINAPI call_dc_hook16( HDC16 hdc16, WORD code, DWORD data, LPARAM lParam )
 {
+    WORD args[6];
+    DWORD ret;
     FARPROC16 proc = NULL;
     HDC hdc = HDC_32( hdc16 );
     DC *dc = DC_GetDCPtr( hdc );
+
     if (!dc) return FALSE;
     proc = dc->hookProc;
     GDI_ReleaseObj( hdc );
     if (!proc) return FALSE;
-    return GDI_CallTo16_word_wwll( proc, hdc16, code, data, lParam );
+    args[5] = hdc16;
+    args[4] = code;
+    args[3] = HIWORD(data);
+    args[2] = LOWORD(data);
+    args[1] = HIWORD(lParam);
+    args[0] = LOWORD(lParam);
+    WOWCallback16Ex( (DWORD)proc, WCB16_PASCAL, sizeof(args), args, &ret );
+    return LOWORD(ret);
 }
 
 /***********************************************************************
diff --git a/objects/font.c b/objects/font.c
index 63fac1b..636199e 100644
--- a/objects/font.c
+++ b/objects/font.c
@@ -132,10 +132,6 @@
   { SYMBOL_CHARSET, CP_SYMBOL, FS(31)},
 };
 
-/* ### start build ### */
-extern WORD CALLBACK FONT_CallTo16_word_llwl(FONTENUMPROC16,LONG,LONG,WORD,LONG);
-/* ### stop build ### */
-
 /***********************************************************************
  *              LOGFONT conversion functions.
  */
@@ -522,13 +518,24 @@
     if( pfe->lpLogFontParam->lfCharSet == DEFAULT_CHARSET ||
 	pfe->lpLogFontParam->lfCharSet == plf->elfLogFont.lfCharSet )
     {
+        WORD args[7];
+        DWORD result;
+
         FONT_EnumLogFontExWTo16(plf, pfe->lpLogFont);
 	FONT_NewTextMetricExWTo16(ptm, pfe->lpTextMetric);
         pfe->dwFlags |= ENUM_CALLED;
         GDI_ReleaseObj( pfe->hdc );  /* release the GDI lock */
 
-        ret = FONT_CallTo16_word_llwl( pfe->lpEnumFunc, pfe->segLogFont, pfe->segTextMetric,
-                                       (UINT16)fType, (LPARAM)pfe->lpData );
+        args[6] = SELECTOROF(pfe->segLogFont);
+        args[5] = OFFSETOF(pfe->segLogFont);
+        args[4] = SELECTOROF(pfe->segTextMetric);
+        args[3] = OFFSETOF(pfe->segTextMetric);
+        args[2] = fType;
+        args[1] = HIWORD(pfe->lpData);
+        args[0] = LOWORD(pfe->lpData);
+        WOWCallback16Ex( (DWORD)pfe->lpEnumFunc, WCB16_PASCAL, sizeof(args), args, &result );
+        ret = LOWORD(result);
+
         /* get the lock again and make sure the DC is still valid */
         dc = DC_GetDCPtr( pfe->hdc );
         if (!dc || dc != pfe->dc || dc->physDev != pfe->physDev)
diff --git a/objects/metafile.c b/objects/metafile.c
index 1499c37..9fd5f9a 100644
--- a/objects/metafile.c
+++ b/objects/metafile.c
@@ -75,9 +75,6 @@
 #define MFHEADERSIZE (sizeof(METAHEADER))
 #define MFVERSION 0x300
 
-/* ### start build ### */
-extern WORD CALLBACK MF_CallTo16_word_wllwl(MFENUMPROC16,WORD,LONG,LONG,WORD,LONG);
-/* ### stop build ### */
 
 /******************************************************************
  *         MF_AddHandle
@@ -634,6 +631,7 @@
     HPEN hPen;
     HBRUSH hBrush;
     HFONT hFont;
+    WORD args[8];
     BOOL16 result = TRUE, loaded = FALSE;
 
     TRACE("(%p, %04x, %p, %08lx)\n", hdc, hmf, lpEnumFunc, lpData);
@@ -661,20 +659,31 @@
 
     /* loop through metafile records */
 
+    args[7] = hdc16;
+    args[6] = SELECTOROF(spht);
+    args[5] = OFFSETOF(spht);
+    args[4] = seg + (HIWORD(offset) << __AHSHIFT);
+    args[3] = LOWORD(offset);
+    args[2] = mh->mtNoObjects;
+    args[1] = HIWORD(lpData);
+    args[0] = LOWORD(lpData);
+
     while (offset < (mh->mtSize * 2))
     {
+        DWORD ret;
+
 	mr = (METARECORD *)((char *)mh + offset);
 
-        if (!MF_CallTo16_word_wllwl( lpEnumFunc, hdc16, spht,
-                                  MAKESEGPTR( seg + (HIWORD(offset) << __AHSHIFT), LOWORD(offset) ),
-                                     mh->mtNoObjects, (LONG)lpData ))
+        WOWCallback16Ex( (DWORD)lpEnumFunc, WCB16_PASCAL, sizeof(args), args, &ret );
+        if (!LOWORD(ret))
 	{
 	    result = FALSE;
 	    break;
 	}
 
-
 	offset += (mr->rdSize * 2);
+        args[4] = seg + (HIWORD(offset) << __AHSHIFT);
+        args[3] = LOWORD(offset);
     }
 
     SelectObject(hdc, hBrush);