1
0
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:
FunkyFr3sh 2021-05-10 01:00:55 +02:00
parent 79c3e8722b
commit 550588fe55
6 changed files with 36 additions and 13 deletions

View File

@ -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 \

View File

@ -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);

View File

@ -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;
}

View File

@ -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);
}
}

View File

@ -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);

View File

@ -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)
{