Always retrieve Callout routines using GetProcAddress().

diff --git a/if1632/thunk.c b/if1632/thunk.c
index d8c1009..64e1585 100644
--- a/if1632/thunk.c
+++ b/if1632/thunk.c
@@ -10,6 +10,7 @@
 #include "task.h"
 #include "hook.h"
 #include "callback.h"
+#include "builtin16.h"
 #include "user.h"
 #include "heap.h"
 #include "neexe.h"
@@ -846,17 +847,35 @@
 }
 
 /***********************************************************************
+ *           THUNK_GetCalloutThunk
+ *
+ * Retrieve API entry point with given name from given module.
+ * If module is builtin, return the 32-bit entry point, otherwise
+ * create a 32->16 thunk to the 16-bit entry point, using the 
+ * given relay code.
+ *
+ */
+static FARPROC THUNK_GetCalloutThunk( NE_MODULE *pModule, LPSTR name, RELAY relay )
+{
+    FARPROC16 proc = WIN32_GetProcAddress16( pModule->self, name );
+    if ( !proc ) return 0;
+
+    if ( pModule->flags & NE_FFLAGS_BUILTIN )
+        return (FARPROC)((ENTRYPOINT16 *)PTR_SEG_TO_LIN( proc ))->target;
+    else
+        return (FARPROC)THUNK_Alloc( proc, relay );
+}
+
+/***********************************************************************
  *           THUNK_InitCallout
  */
 void THUNK_InitCallout(void)
 {
     HMODULE hModule;
-    WINE_MODREF *wm;
     NE_MODULE *pModule;
 
     hModule = GetModuleHandleA( "USER32" );
-    wm = MODULE32_LookupHMODULE( hModule );
-    if ( wm && !(wm->flags & WINE_MODREF_INTERNAL) )
+    if ( hModule )
     {
 #define GETADDR( var, name )  \
         *(FARPROC *)&Callout.##var = GetProcAddress( hModule, name )
@@ -880,14 +899,12 @@
 #undef GETADDR
     }
 
-    hModule = GetModuleHandle16( "USER" );
-    pModule = NE_GetPtr( hModule );
-    if ( pModule && !(pModule->flags & NE_FFLAGS_BUILTIN) )
+    pModule = NE_GetPtr( GetModuleHandle16( "USER" ) );
+    if ( pModule )
     {
 #define GETADDR( var, name, thk )  \
-        *(FARPROC *)&Callout.##var = (FARPROC) \
-              THUNK_Alloc( WIN32_GetProcAddress16( hModule, name ), \
-                           (RELAY)THUNK_CallTo16_##thk )
+        *(FARPROC *)&Callout.##var = THUNK_GetCalloutThunk( pModule, name, \
+                                                 (RELAY)THUNK_CallTo16_##thk )
 
         GETADDR( PeekMessage16, "PeekMessage", word_lwwww );
         GETADDR( GetMessage16, "GetMessage", word_lwww );