Make sure `CheckLib` in `Program` static ctor disposes GUI properly

This commit is contained in:
YoshiRulz 2022-11-04 07:08:54 +10:00
parent c891cc2cb5
commit 8949b1aa6b
No known key found for this signature in database
GPG Key ID: C4DE31C245353FB7
1 changed files with 15 additions and 8 deletions

View File

@ -41,19 +41,26 @@ namespace BizHawk.Client.EmuHawk
return;
}
static void CheckLib(string dllToLoad, string desc)
foreach (var (dllToLoad, desc) in new[]
{
("vcruntime140_1.dll", "Microsoft Visual C++ Redistributable for Visual Studio 2015, 2017 and 2019 (x64)"),
("msvcr100.dll", "Microsoft Visual C++ 2010 SP1 Runtime (x64)"), // for Mupen64Plus, and some others
})
{
var p = OSTC.LinkedLibManager.LoadOrZero(dllToLoad);
if (p == IntPtr.Zero)
if (p != IntPtr.Zero)
{
using (var box = new ExceptionBox($"EmuHawk needs {desc} in order to run! See the readme on GitHub for more info. (EmuHawk will now close.) Internal error message: {OSTC.LinkedLibManager.GetErrorMessage()}")) box.ShowDialog();
Process.GetCurrentProcess().Kill();
return;
OSTC.LinkedLibManager.FreeByPtr(p);
continue;
}
OSTC.LinkedLibManager.FreeByPtr(p);
// else it's missing or corrupted
using (ExceptionBox box = new($"EmuHawk needs {desc} in order to run! See the readme on GitHub for more info. (EmuHawk will now close.) Internal error message: {OSTC.LinkedLibManager.GetErrorMessage()}"))
{
box.ShowDialog();
}
Process.GetCurrentProcess().Kill();
return;
}
CheckLib("vcruntime140_1.dll", "Microsoft Visual C++ Redistributable for Visual Studio 2015, 2017 and 2019 (x64)");
CheckLib("msvcr100.dll", "Microsoft Visual C++ 2010 SP1 Runtime (x64)"); // for Mupen64Plus, and some others
// this will look in subdirectory "dll" to load pinvoked stuff
var dllDir = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "dll");