diff --git a/YaeAchievementLib/YaeAchievementLib.csproj b/YaeAchievementLib/YaeAchievementLib.csproj index 10ce1b0..7bce664 100644 --- a/YaeAchievementLib/YaeAchievementLib.csproj +++ b/YaeAchievementLib/YaeAchievementLib.csproj @@ -43,7 +43,7 @@ Yae.Lib - 5.4.0 + 5.4.1 HoloHat true GPL-3.0-only diff --git a/YaeAchievementLib/src/Application.cs b/YaeAchievementLib/src/Application.cs index df88e63..15cd63f 100644 --- a/YaeAchievementLib/src/Application.cs +++ b/YaeAchievementLib/src/Application.cs @@ -7,8 +7,13 @@ namespace Yae; internal static unsafe class Application { + private static bool _initialized; + [UnmanagedCallersOnly(EntryPoint = "YaeMain")] private static uint Awake(nint hModule) { + if (Interlocked.Exchange(ref _initialized, true)) { + return 1; + } Native.RegisterUnhandledExceptionHandler(); Log.UseConsoleOutput(); Log.Trace("~"); @@ -29,6 +34,7 @@ internal static unsafe class Application { [UnmanagedCallersOnly(EntryPoint = "YaeWndHook")] private static nint WndHook(int nCode, nint wParam, nint lParam) { + ((delegate*unmanaged) &Awake)(0); return User32.CallNextHookEx(0, nCode, wParam, lParam); } diff --git a/YaeAchievementLib/src/Utilities/WinApi.cs b/YaeAchievementLib/src/Utilities/WinApi.cs index edb2107..e621750 100644 --- a/YaeAchievementLib/src/Utilities/WinApi.cs +++ b/YaeAchievementLib/src/Utilities/WinApi.cs @@ -43,6 +43,9 @@ internal static unsafe partial class Kernel32 { [return:MarshalAs(UnmanagedType.I4)] [LibraryImport("KERNEL32.dll", SetLastError = true)] internal static partial bool SetConsoleMode(nint hConsoleHandle, uint dwMode); + + [LibraryImport("KERNEL32.dll", SetLastError = true)] + internal static partial nint CreateThread(nint lpThreadAttributes, nint dwStackSize, delegate*unmanaged lpStartAddress, nint lpParameter, uint dwCreationFlags, uint* lpThreadId); }