From 8bf4d95384d60f288c0b02ae2da508d5a0dc6757 Mon Sep 17 00:00:00 2001 From: Edgaru089 Date: Mon, 25 Mar 2024 21:10:40 +0800 Subject: [PATCH] Fix compiling on both MSVC & mingw32 Turns out easyX is different on MSVC and mingw32 --- JacksEscape.vcxproj | 34 ++++++++++++++---- JacksEscape.vcxproj.filters | 72 +++++++++++++++++++++++++++++++++---- main.cpp | 6 ++++ render_pattern.h | 2 +- render_util.cpp | 20 +++++++---- types.c | 4 +-- 6 files changed, 117 insertions(+), 21 deletions(-) diff --git a/JacksEscape.vcxproj b/JacksEscape.vcxproj index 1f6c2aa..7ca42be 100644 --- a/JacksEscape.vcxproj +++ b/JacksEscape.vcxproj @@ -104,6 +104,7 @@ true _DEBUG;_CONSOLE;%(PreprocessorDefinitions) true + stdcpp20 Console @@ -118,6 +119,7 @@ true NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true + stdcpp20 Console @@ -127,9 +129,17 @@ - - - + + + + + + + + + + + @@ -137,9 +147,21 @@ - - - + + + + + + + + + + + + + + + diff --git a/JacksEscape.vcxproj.filters b/JacksEscape.vcxproj.filters index 63b2f25..49e2e00 100644 --- a/JacksEscape.vcxproj.filters +++ b/JacksEscape.vcxproj.filters @@ -33,13 +33,37 @@ Util - + + Util + + 头文件 - + 头文件 - + + 头文件 + + + 头文件 + + + 头文件 + + + 头文件 + + + 头文件 + + + 头文件 + + + 头文件 + + 头文件 @@ -53,13 +77,49 @@ Util - + 源文件 - + 源文件 - + + 源文件 + + + 源文件 + + + 源文件 + + + 源文件 + + + 源文件 + + + 源文件 + + + 源文件 + + + 源文件 + + + 源文件 + + + 源文件 + + + 源文件 + + + 源文件 + + 源文件 diff --git a/main.cpp b/main.cpp index 7fb846e..6ba0367 100644 --- a/main.cpp +++ b/main.cpp @@ -15,11 +15,17 @@ int main() { lastFrame = lastUpdate = frameCounter = time_Now(); int frameCount = 0; +#ifdef __MINGW32__ SetProcessDPIAware(); +#endif HWND win = initgraph(SCREEN_WIDTH, SCREEN_HEIGHT); SetWindowTextA(win, "JacksEscape"); +#ifdef __MINGW32__ settextstyle(TEXTHEIGHT, 0, "Courier New"); +#else // MSVC + settextstyle(TEXTHEIGHT, 0, L"Courier New"); +#endif vector_Vector *debugText = vector_Create(1); App *app = app_NewApp(); diff --git a/render_pattern.h b/render_pattern.h index 956f2b8..73684d9 100644 --- a/render_pattern.h +++ b/render_pattern.h @@ -1,7 +1,7 @@ #pragma once // for BYTE -#include +#include #ifdef __cplusplus extern "C" { diff --git a/render_util.cpp b/render_util.cpp index 55c3bf0..89c575e 100644 --- a/render_util.cpp +++ b/render_util.cpp @@ -17,12 +17,18 @@ extern "C" { static vector_Vector *tbuf; +#ifdef __MINGW32__ +#define NCHAR char +#else +#define NCHAR wchar_t +#endif + void render_DrawText(int x, int y, const char *str) { if (!tbuf) - tbuf = vector_Create(1); + tbuf = vector_Create(sizeof(NCHAR)); - int cx = x, cy = y; - const char zero = 0; + int cx = x, cy = y; + const NCHAR zero = 0; vector_Clear(tbuf); int len = strlen(str); @@ -34,8 +40,10 @@ void render_DrawText(int x, int y, const char *str) { cy += TEXTHEIGHT; vector_Clear(tbuf); - } else - vector_Push(tbuf, &str[i]); + } else { + NCHAR wc = str[i]; + vector_Push(tbuf, &wc); + } i++; } @@ -77,7 +85,7 @@ void render_SetModes(FillMode mode, TimePoint since) { if (mode.rotate.microseconds != 0) { // Rotate mode - int steps = round(duration_Seconds(time_Since(since)) / duration_Seconds(mode.rotate)); + int steps = (int)round(duration_Seconds(time_Since(since)) / duration_Seconds(mode.rotate)); static const long hatches[] = {HS_HORIZONTAL, HS_FDIAGONAL, HS_VERTICAL, HS_BDIAGONAL}; setfillstyle(BS_HATCHED, hatches[steps % 4], NULL); diff --git a/types.c b/types.c index 085c0ef..52b49c6 100644 --- a/types.c +++ b/types.c @@ -115,8 +115,8 @@ static ZwSetTimerResolution_Type ZwSetTimerResolution; void duration_Sleep(const Duration t) { if (!NtDelayExecution) { - NtDelayExecution = (NtDelayExecution_Type)GetProcAddress(GetModuleHandle("ntdll.dll"), "NtDelayExecution"); - ZwSetTimerResolution = (ZwSetTimerResolution_Type)GetProcAddress(GetModuleHandle("ntdll.dll"), "ZwSetTimerResolution"); + NtDelayExecution = (NtDelayExecution_Type)GetProcAddress(GetModuleHandleA("ntdll.dll"), "NtDelayExecution"); + ZwSetTimerResolution = (ZwSetTimerResolution_Type)GetProcAddress(GetModuleHandleA("ntdll.dll"), "ZwSetTimerResolution"); // Only run this once ULONG actualResolution;