Check all Callouts function pointers for NULL before using them.
Don't load USER dll if not needed by the application.

diff --git a/objects/palette.c b/objects/palette.c
index 4655819..3a634aa 100644
--- a/objects/palette.c
+++ b/objects/palette.c
@@ -787,14 +787,16 @@
     if (!(dc = DC_GetDCPtr( hDC ))) return 0;
     size = dc->devCaps->sizePalette;
     GDI_ReleaseObj( hDC );
-    hWnd = Callout.WindowFromDC( hDC );
+    if (Callout.WindowFromDC)
+    {
+        hWnd = Callout.WindowFromDC( hDC );
 
-    /* Docs say that we have to remap current drawable pixel by pixel
-     * but it would take forever given the speed of XGet/PutPixel.
-     */
-    if (hWnd && size) 
-        Callout.RedrawWindow( hWnd, NULL, 0, RDW_INVALIDATE );
-
+        /* Docs say that we have to remap current drawable pixel by pixel
+         * but it would take forever given the speed of XGet/PutPixel.
+         */
+        if (hWnd && size)
+            Callout.RedrawWindow( hWnd, NULL, 0, RDW_INVALIDATE );
+    }
     return 0x666;
 }