From f8198fac538331f1970e29c98d745f141574165d Mon Sep 17 00:00:00 2001 From: pongo1231 Date: Sat, 3 Feb 2024 02:12:09 +0000 Subject: [PATCH] ChaosMod: Get rid of -fpermissive for non-msvc compilers --- ChaosMod/CMakeLists.txt | 2 +- ChaosMod/Components/LuaScripts.cpp | 4 ++-- ChaosMod/Memory/Hooks/PresentHook.cpp | 4 ++-- ChaosMod/Memory/Memory.cpp | 12 ------------ ChaosMod/Memory/Memory.h | 13 ++++++++++++- 5 files changed, 17 insertions(+), 18 deletions(-) diff --git a/ChaosMod/CMakeLists.txt b/ChaosMod/CMakeLists.txt index 306c3176c..fd4c663c6 100644 --- a/ChaosMod/CMakeLists.txt +++ b/ChaosMod/CMakeLists.txt @@ -25,7 +25,7 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC") target_compile_options(ChaosMod PRIVATE -DUNICODE -D_UNICODE -DNOMINMAX /Zi) target_link_options(ChaosMod PRIVATE /DEBUG /OPT:REF /OPT:ICF) else() - target_compile_options(ChaosMod PRIVATE -municode -fpermissive) + target_compile_options(ChaosMod PRIVATE -municode) target_link_options(ChaosMod PRIVATE -static) endif() diff --git a/ChaosMod/Components/LuaScripts.cpp b/ChaosMod/Components/LuaScripts.cpp index ad7952369..1a82709a1 100644 --- a/ChaosMod/Components/LuaScripts.cpp +++ b/ChaosMod/Components/LuaScripts.cpp @@ -260,9 +260,9 @@ _LUAFUNC sol::object LuaInvoke(const std::string &scriptName, const sol::this_st switch (returnType) { case LuaNativeReturnType::Bool: - return sol::make_object(lua, reinterpret_cast(*returned)); + return sol::make_object(lua, *reinterpret_cast(returned)); case LuaNativeReturnType::Int: - return sol::make_object(lua, reinterpret_cast(*returned)); + return sol::make_object(lua, *reinterpret_cast(returned)); case LuaNativeReturnType::Float: return sol::make_object(lua, *reinterpret_cast(returned)); case LuaNativeReturnType::String: diff --git a/ChaosMod/Memory/Hooks/PresentHook.cpp b/ChaosMod/Memory/Hooks/PresentHook.cpp index 852218113..7550267ef 100644 --- a/ChaosMod/Memory/Hooks/PresentHook.cpp +++ b/ChaosMod/Memory/Hooks/PresentHook.cpp @@ -33,7 +33,7 @@ static bool OnHook() ms_PresentAddr = handle.At(64).Get(); OG_IDXGISwapChain_Present = *(HRESULT(**)(IDXGISwapChain *, UINT, UINT))ms_PresentAddr; - Memory::Write(ms_PresentAddr, HK_IDXGISwapChain_Present); + Memory::Write(ms_PresentAddr, reinterpret_cast(HK_IDXGISwapChain_Present)); return true; } @@ -43,7 +43,7 @@ static void OnCleanup() // Only reset vftable entries if address still points to our retour if (ms_PresentAddr && *ms_PresentAddr == HK_IDXGISwapChain_Present) { - Memory::Write(ms_PresentAddr, OG_IDXGISwapChain_Present); + Memory::Write(ms_PresentAddr, reinterpret_cast(OG_IDXGISwapChain_Present)); } } diff --git a/ChaosMod/Memory/Memory.cpp b/ChaosMod/Memory/Memory.cpp index e88b5da72..05f895550 100644 --- a/ChaosMod/Memory/Memory.cpp +++ b/ChaosMod/Memory/Memory.cpp @@ -225,18 +225,6 @@ namespace Memory return scanPattern(); } - MH_STATUS AddHook(void *target, void *detour, void *orig) - { - auto result = MH_CreateHook(target, detour, reinterpret_cast(orig)); - - if (result == MH_OK) - { - MH_EnableHook(target); - } - - return result; - } - const char *GetTypeName(__int64 vftAddr) { if (vftAddr) diff --git a/ChaosMod/Memory/Memory.h b/ChaosMod/Memory/Memory.h index f5c990907..40aec181f 100644 --- a/ChaosMod/Memory/Memory.h +++ b/ChaosMod/Memory/Memory.h @@ -29,7 +29,18 @@ namespace Memory }; Handle FindPattern(const std::string &pattern, const PatternScanRange &&scanRange = {}); - MH_STATUS AddHook(void *target, void *detour, void *orig); + + template inline MH_STATUS AddHook(void *target, T detour, T *orig) + { + auto result = MH_CreateHook(target, reinterpret_cast(detour), reinterpret_cast(orig)); + + if (result == MH_OK) + { + MH_EnableHook(target); + } + + return result; + } template inline void Write(T *addr, T value, int count = 1) {