mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-14 22:03:27 +01:00
fix GCC build / add support for hook=4
This commit is contained in:
parent
79c3e8722b
commit
550588fe55
2
Makefile
2
Makefile
@ -3,7 +3,7 @@
|
||||
WINDRES ?= windres
|
||||
LDFLAGS = -Iinc -Wall -Wl,--enable-stdcall-fixup -s
|
||||
CFLAGS = -std=c99
|
||||
LIBS = -lgdi32 -lwinmm
|
||||
LIBS = -lgdi32 -lwinmm -lpsapi -ldbghelp
|
||||
|
||||
FILES = src/IDirect3D/IDirect3D.c \
|
||||
src/IDirect3D/IDirect3D2.c \
|
||||
|
@ -61,9 +61,7 @@ void cfg_load()
|
||||
|
||||
g_config.save_settings = cfg_get_int("savesettings", 1);
|
||||
|
||||
#ifdef _MSC_VER
|
||||
g_hook_method = cfg_get_int("hook", 4);
|
||||
#endif
|
||||
|
||||
g_ddraw->render.maxfps = cfg_get_int("maxfps", -1);
|
||||
g_ddraw->render.minfps = cfg_get_int("minfps", 0);
|
||||
|
2
src/dd.c
2
src/dd.c
@ -898,7 +898,7 @@ HRESULT dd_CreateEx(GUID* lpGuid, LPVOID* lplpDD, REFIID iid, IUnknown* pUnkOute
|
||||
}
|
||||
else
|
||||
{
|
||||
dprintf(" GUID = %08X (IID_IDirectDrawX), ddraw = %p\n", iid ? ((GUID*)iid)->Data1 : NULL, dd);
|
||||
dprintf(" GUID = %08X (IID_IDirectDrawX), ddraw = %p\n", iid ? ((GUID*)iid)->Data1 : 0, dd);
|
||||
|
||||
dd->lpVtbl = &g_dd_vtblx;
|
||||
}
|
||||
|
@ -748,10 +748,10 @@ HRESULT dds_GetCaps(IDirectDrawSurfaceImpl *This, LPDDSCAPS lpDDSCaps)
|
||||
return DD_OK;
|
||||
}
|
||||
|
||||
HRESULT dds_GetClipper(IDirectDrawSurfaceImpl* This, LPDIRECTDRAWCLIPPER FAR* a)
|
||||
HRESULT dds_GetClipper(IDirectDrawSurfaceImpl* This, LPDIRECTDRAWCLIPPER FAR* lpClipper)
|
||||
{
|
||||
if (a)
|
||||
*a = This->clipper;
|
||||
if (lpClipper)
|
||||
*lpClipper = (LPDIRECTDRAWCLIPPER)This->clipper;
|
||||
|
||||
return DD_OK;
|
||||
}
|
||||
@ -993,7 +993,7 @@ void* dds_GetBuffer(IDirectDrawSurfaceImpl* This)
|
||||
return NULL;
|
||||
|
||||
if (This->backbuffer || (This->caps & DDSCAPS_BACKBUFFER))
|
||||
return (void*)InterlockedExchangeAdd(&This->surface, 0);
|
||||
return (void*)InterlockedExchangeAdd((LONG*)&This->surface, 0);
|
||||
|
||||
return This->surface;
|
||||
}
|
||||
@ -1004,7 +1004,7 @@ HDC dds_GetHDC(IDirectDrawSurfaceImpl* This)
|
||||
return NULL;
|
||||
|
||||
if (This->backbuffer || (This->caps & DDSCAPS_BACKBUFFER))
|
||||
return (HDC)InterlockedExchangeAdd(&This->hdc, 0);
|
||||
return (HDC)InterlockedExchangeAdd((LONG*)&This->hdc, 0);
|
||||
|
||||
return This->hdc;
|
||||
}
|
||||
@ -1127,7 +1127,7 @@ HRESULT dd_CreateSurface(LPDDSURFACEDESC lpDDSurfaceDesc, LPDIRECTDRAWSURFACE FA
|
||||
desc.dwWidth = dst_surface->width;
|
||||
desc.dwHeight = dst_surface->height;
|
||||
|
||||
dd_CreateSurface(&desc, &dst_surface->backbuffer, unkOuter);
|
||||
dd_CreateSurface(&desc, (LPDIRECTDRAWSURFACE*)&dst_surface->backbuffer, unkOuter);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
#include "dd.h"
|
||||
|
||||
typedef HRESULT (WINAPI *DIRECTINPUTCREATEAPROC)(HINSTANCE, DWORD, LPDIRECTINPUTA*, LPUNKNOWN);
|
||||
typedef HRESULT (WINAPI *DIRECTINPUT8CREATEPROC)(HINSTANCE, DWORD, REFIID, LPVOID*, LPUNKNOWN);
|
||||
typedef HRESULT (WINAPI *DIRECTINPUT8CREATEPROC)(HINSTANCE, DWORD, REFIID, LPDIRECTINPUT8*, LPUNKNOWN);
|
||||
typedef HRESULT (WINAPI *DICREATEDEVICEPROC)(IDirectInputA*, REFGUID, LPDIRECTINPUTDEVICEA *, LPUNKNOWN);
|
||||
typedef HRESULT (WINAPI *DIDSETCOOPERATIVELEVELPROC)(IDirectInputDeviceA *, HWND, DWORD);
|
||||
typedef HRESULT (WINAPI *DIDGETDEVICEDATAPROC)(IDirectInputDeviceA*, DWORD, LPDIDEVICEOBJECTDATA, LPDWORD, DWORD);
|
||||
|
29
src/hook.c
29
src/hook.c
@ -1,6 +1,7 @@
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
#include <stdio.h>
|
||||
#include <psapi.h>
|
||||
#include "dd.h"
|
||||
#include "winapi_hooks.h"
|
||||
#include "hook.h"
|
||||
@ -231,6 +232,7 @@ void hook_create(hook_list* hooks)
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (g_hook_method == 3 || g_hook_method == 4)
|
||||
{
|
||||
@ -245,8 +247,17 @@ void hook_create(hook_list* hooks)
|
||||
char mod_dir[MAX_PATH] = { 0 };
|
||||
char mod_filename[MAX_PATH] = { 0 };
|
||||
HMODULE hmod = NULL;
|
||||
HANDLE process = NULL;
|
||||
|
||||
#ifndef _MSC_VER
|
||||
HMODULE mods[512];
|
||||
memset(mods, 0, sizeof(mods));
|
||||
process = GetCurrentProcess();
|
||||
EnumProcessModules(process, mods, sizeof(mods) - sizeof(mods[0]), NULL);
|
||||
for (int i = 0; i < sizeof(mods) / sizeof(mods[0]) && (hmod = mods[i]); i++)
|
||||
#else
|
||||
while (hmod = DetourEnumerateModules(hmod))
|
||||
#endif
|
||||
{
|
||||
if (hmod == g_ddraw_module)
|
||||
continue;
|
||||
@ -267,9 +278,11 @@ void hook_create(hook_list* hooks)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (process)
|
||||
CloseHandle(process);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (g_hook_method == 1)
|
||||
{
|
||||
@ -296,6 +309,7 @@ void hook_revert(hook_list* hooks)
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (g_hook_method == 3 || g_hook_method == 4)
|
||||
{
|
||||
@ -309,8 +323,17 @@ void hook_revert(hook_list* hooks)
|
||||
char mod_path[MAX_PATH] = { 0 };
|
||||
char mod_dir[MAX_PATH] = { 0 };
|
||||
HMODULE hmod = NULL;
|
||||
HANDLE process = NULL;
|
||||
|
||||
#ifndef _MSC_VER
|
||||
HMODULE mods[512];
|
||||
memset(mods, 0, sizeof(mods));
|
||||
process = GetCurrentProcess();
|
||||
EnumProcessModules(process, mods, sizeof(mods) - sizeof(mods[0]), NULL);
|
||||
for (int i = 0; i < sizeof(mods) / sizeof(mods[0]) && (hmod = mods[i]); i++)
|
||||
#else
|
||||
while (hmod = DetourEnumerateModules(hmod))
|
||||
#endif
|
||||
{
|
||||
if (hmod == g_ddraw_module)
|
||||
continue;
|
||||
@ -325,9 +348,11 @@ void hook_revert(hook_list* hooks)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (process)
|
||||
CloseHandle(process);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (g_hook_method == 1)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user