#pragma once #define CALL_ORIG_FUNC(func) Compat::getOrigFuncPtr() #define HOOK_FUNCTION(module, func, newFunc) \ Compat::hookFunction(#module, #func, &newFunc) namespace Compat { template OrigFuncPtr& getOrigFuncPtr() { static OrigFuncPtr origFuncPtr = origFunc; return origFuncPtr; } void hookFunction(void*& origFuncPtr, void* newFuncPtr); void hookFunction(const char* moduleName, const char* funcName, void*& origFuncPtr, void* newFuncPtr); template void hookFunction(const char* moduleName, const char* funcName, OrigFuncPtr newFuncPtr) { hookFunction(moduleName, funcName, reinterpret_cast(getOrigFuncPtr()), newFuncPtr); } void unhookAllFunctions(); }