Check all Callouts function pointers for NULL before using them.
Don't load USER dll if not needed by the application.
diff --git a/if1632/thunk.c b/if1632/thunk.c
index 3aa43ec..3a1dbcd 100644
--- a/if1632/thunk.c
+++ b/if1632/thunk.c
@@ -43,7 +43,6 @@
/* GetMessageA */ NULL,
/* SendMessageA */ NULL,
/* PostMessageA */ NULL,
- /* PostAppMessage16 */ NULL,
/* TranslateMessage */ NULL,
/* DispatchMessageA */ NULL,
/* RedrawWindow */ NULL,
@@ -168,7 +167,7 @@
HMODULE hModule;
NE_MODULE *pModule;
- hModule = LoadLibraryA( "user32.dll" );
+ hModule = GetModuleHandleA( "user32.dll" );
if ( hModule )
{
#define GETADDR( name ) \
@@ -188,21 +187,21 @@
GETADDR( MessageBoxW );
#undef GETADDR
}
+ else WARN("no 32-bit USER\n");
- pModule = NE_GetPtr( LoadLibrary16( "USER.EXE" ) );
+ pModule = NE_GetPtr( GetModuleHandle16( "USER.EXE" ) );
if ( pModule )
{
#define GETADDR( var, name, thk ) \
*(FARPROC *)&Callout.var = THUNK_GetCalloutThunk( pModule, name, \
(RELAY)THUNK_CallTo16_##thk )
- GETADDR( PostAppMessage16, "PostAppMessage", word_wwwl );
GETADDR( FinalUserInit16, "FinalUserInit", word_ );
GETADDR( InitThreadInput16, "InitThreadInput", word_ww );
GETADDR( UserYield16, "UserYield", word_ );
GETADDR( DestroyIcon32, "DestroyIcon32", word_ww );
GETADDR( UserSignalProc, "SignalProc32", word_lllw );
-
#undef GETADDR
}
+ else WARN("no 16-bit USER\n");
}