diff --git a/src/globals.h b/src/globals.h index 5e6b6461d9..b6541a4f4f 100644 --- a/src/globals.h +++ b/src/globals.h @@ -1311,6 +1311,7 @@ EXTERN int wild_menu_showing INIT(= 0); #ifdef MSWIN EXTERN char_u toupper_tab[256]; // table for toupper() EXTERN char_u tolower_tab[256]; // table for tolower() +EXTERN int found_register_arg INIT(= FALSE); #endif #ifdef FEAT_LINEBREAK diff --git a/src/main.c b/src/main.c index 30014d4be2..686fb14324 100644 --- a/src/main.c +++ b/src/main.c @@ -161,6 +161,20 @@ main break; } #endif +#ifdef MSWIN + // Need to find "-register" before loading any libraries. + for (i = 1; i < argc; ++i) + if (STRICMP(argv[i] + 1, "register") == 0 + && (argv[i][0] == '-' || argv[i][0] == '/')) + { + found_register_arg = TRUE; + break; + } +#endif + + /* + * Various initialisations shared with tests. + */ common_init(¶ms); #ifdef VIMDLL diff --git a/src/os_win32.c b/src/os_win32.c index d40d0332c2..3bfeee66ec 100644 --- a/src/os_win32.c +++ b/src/os_win32.c @@ -529,6 +529,10 @@ vimLoadLib(char *name) { HINSTANCE dll = NULL; + // No need to load any library when registering OLE. + if (found_register_arg) + return dll; + // NOTE: Do not use mch_dirname() and mch_chdir() here, they may call // vimLoadLib() recursively, which causes a stack overflow. if (exe_path == NULL) diff --git a/src/version.c b/src/version.c index ed632f7ba9..8140e20fa7 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 2821, /**/ 2820, /**/