gta2-seuko-mod/src/dinput8_proxy.cpp
izawartka 81d8832227 Add dinput8 proxy
- Added dinput8.dll proxy to not have to include game's copy in release
2025-12-22 17:50:42 +01:00

50 lines
1.4 KiB
C++

#include <windows.h>
typedef HRESULT(WINAPI* DirectInput8Create_t)(HINSTANCE, DWORD, REFIID, LPVOID*, LPUNKNOWN);
static HMODULE hOriginalDll = nullptr;
static DirectInput8Create_t pDirectInput8Create = nullptr;
extern "C" __declspec(dllexport) HRESULT WINAPI DirectInput8Create(
HINSTANCE hinst,
DWORD dwVersion,
REFIID riidltf,
LPVOID* ppvOut,
LPUNKNOWN punkOuter)
{
if (!hOriginalDll)
{
char systemPath[MAX_PATH];
GetSystemDirectoryA(systemPath, MAX_PATH);
strcat_s(systemPath, "\\dinput8.dll");
hOriginalDll = LoadLibraryA(systemPath);
if (!hOriginalDll)
{
MessageBoxA(nullptr, "Failed to load original dinput8.dll from System32", "Seukomod proxy error", MB_ICONERROR);
return E_FAIL;
}
pDirectInput8Create = (DirectInput8Create_t)GetProcAddress(hOriginalDll, "DirectInput8Create");
if (!pDirectInput8Create)
{
MessageBoxA(nullptr, "Failed to get DirectInput8Create from original dinput8.dll", "Seukomod proxy error", MB_ICONERROR);
return E_FAIL;
}
}
return pDirectInput8Create(hinst, dwVersion, riidltf, ppvOut, punkOuter);
}
void UnloadOriginalDll()
{
if (hOriginalDll)
{
FreeLibrary(hOriginalDll);
hOriginalDll = nullptr;
pDirectInput8Create = nullptr;
}
}