Reactos

[MSCOREE] Show a user popup if .NET is missing (#8374)

Otherwise, you wouldn't see anything at all when opening a .NET app, and
the only hint that a .NET runtime is needed would be to see the message
in the debug log, provided a debugger is connected to ReactOS ...

NOTE: `shell32!ShellMessageBoxA()` is used instead of
`user32!MessageBoxA`, because it turns out mscoree isn't importing
from user32 but from shell32 instead (as in Wine's), and I don't want
to modify the list of imported modules.

NOTE 2: This warning function has been gradually removed with Wine commits:
https://github.com/wine-mirror/wine/commit/c99754ef15a8e5bc0fd9189fc81e4e4d9cc1f589
https://github.com/wine-mirror/wine/commit/6b889fe9188a97765bcbcc2cae5ca2480a73e7af
https://github.com/wine-mirror/wine/commit/5cd6db03495d73e3db024472514a753a44a06772
https://github.com/wine-mirror/wine/commit/26c9bd9f15c364215be9731bb050454c14d90767
Now, a mere `ERR("Wine Mono is not installed\n");` is emitted.

+13
+13
dll/win32/mscoree/metahost.c
··· 82 82 { 83 83 } 84 84 85 + #ifdef __REACTOS__ 86 + int WINAPIV ShellMessageBoxA(HINSTANCE hAppInst, HWND hWnd, LPCSTR lpcText, LPCSTR lpcTitle, UINT fuStyle, ...); 87 + #undef MESSAGE 88 + #define MESSAGE(msg) \ 89 + do { \ 90 + WINE_MESSAGE((msg)); \ 91 + ShellMessageBoxA(NULL, NULL, (msg), "Wine Mono", MB_OK | MB_ICONSTOP); \ 92 + } while(0) 93 + // 94 + // NOTE for wine-syncs: This warning is gradually removed in Wine commits: 95 + // c99754ef15a8, 6b889fe9188a, 5cd6db03495d, and 26c9bd9f15c3 96 + // 97 + #endif 85 98 static void missing_runtime_message(const CLRRuntimeInfo *This) 86 99 { 87 100 if (This->major == 1)