mirror of
https://github.com/narzoul/DDrawCompat
synced 2024-12-30 08:55:36 +01:00
41 lines
1.3 KiB
C++
41 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include <string>
|
|
|
|
#include <Windows.h>
|
|
|
|
#define CALL_ORIG_FUNC(func) Compat::g_origFuncPtr<&func>
|
|
|
|
#define HOOK_FUNCTION(module, func, newFunc) \
|
|
Compat::hookFunction<&func>(#module, #func, &newFunc)
|
|
#define HOOK_SHIM_FUNCTION(func, newFunc) \
|
|
Compat::hookFunction(reinterpret_cast<void*&>(Compat::g_origFuncPtr<&func>), newFunc, #func)
|
|
|
|
namespace Compat
|
|
{
|
|
void closeDbgEng();
|
|
std::string funcPtrToStr(void* funcPtr);
|
|
HMODULE getModuleHandleFromAddress(void* address);
|
|
|
|
template <auto origFunc>
|
|
decltype(origFunc) g_origFuncPtr = origFunc;
|
|
|
|
template <auto origFunc>
|
|
std::string g_origFuncName;
|
|
|
|
FARPROC getProcAddress(HMODULE module, const char* procName);
|
|
void hookFunction(void*& origFuncPtr, void* newFuncPtr, const char* funcName);
|
|
void hookFunction(HMODULE module, const char* funcName, void*& origFuncPtr, void* newFuncPtr);
|
|
void hookFunction(const char* moduleName, const char* funcName, void*& origFuncPtr, void* newFuncPtr);
|
|
void hookIatFunction(HMODULE module, const char* funcName, void* newFuncPtr);
|
|
|
|
template <auto origFunc>
|
|
void hookFunction(const char* moduleName, const char* funcName, decltype(origFunc) newFuncPtr)
|
|
{
|
|
g_origFuncName<origFunc> = funcName;
|
|
hookFunction(moduleName, funcName, reinterpret_cast<void*&>(g_origFuncPtr<origFunc>), newFuncPtr);
|
|
}
|
|
|
|
void removeShim(HMODULE module, const char* funcName);
|
|
}
|