patch 8.1.1230: a lot of code is shared between vim.exe and gvim.exe

Problem:    A lot of code is shared between vim.exe and gvim.exe.
Solution:   Optionally put the shared code in vim.dll. (Ken Takata,
            closes #4287)
diff --git a/src/os_w32exe.c b/src/os_w32exe.c
index 769a851..efdbc96 100644
--- a/src/os_w32exe.c
+++ b/src/os_w32exe.c
@@ -22,8 +22,11 @@
 #endif
 
 // cproto doesn't create a prototype for VimMain()
+#ifdef VIMDLL
+__declspec(dllimport)
+#endif
 int _cdecl VimMain(int argc, char **argv);
-#ifdef FEAT_GUI
+#ifndef VIMDLL
 void _cdecl SaveInst(HINSTANCE hInst);
 #endif
 
@@ -40,8 +43,12 @@
 wmain(int argc UNUSED, wchar_t **argv UNUSED)
 # endif
 {
-# ifdef FEAT_GUI
+# ifndef VIMDLL
+#  ifdef FEAT_GUI
     SaveInst(hInstance);
+#  else
+    SaveInst(GetModuleHandleW(NULL));
+#  endif
 # endif
     VimMain(0, NULL);