From a39453dfeb07ac2fba66a2ab42ff3e470d2835d4 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Sun, 14 Oct 2018 19:57:19 +0200 Subject: [PATCH] Clean up dx_DirectDrawCreate --- Source/dx.cpp | 34 ++++++++++++---------------------- Source/dx.h | 2 +- 2 files changed, 13 insertions(+), 23 deletions(-) diff --git a/Source/dx.cpp b/Source/dx.cpp index cf23fa27f..ec93b5cec 100644 --- a/Source/dx.cpp +++ b/Source/dx.cpp @@ -4,7 +4,7 @@ void *sgpBackBuf; int dx_cpp_init_value; // weak -IDirectDraw *lpDDInterface; +LPDIRECTDRAW lpDDInterface; IDirectDrawPalette *lpDDPalette; // idb int sgdwLockCount; Screen *gpBuffer; @@ -159,32 +159,22 @@ void __cdecl dx_create_primary_surface() ErrDlg(IDD_DIALOG1, v0, "C:\\Src\\Diablo\\Source\\dx.cpp", 109); } -HRESULT __fastcall dx_DirectDrawCreate(GUID *guid, IDirectDraw **DD, void *unknown) +HRESULT __fastcall dx_DirectDrawCreate(LPGUID guid, LPDIRECTDRAW *lplpDD, LPUNKNOWN pUnkOuter) { - IDirectDraw **v3; // ebp - int v4; // eax - FARPROC v5; // ebx - int v6; // eax - GUID *v8; // [esp+10h] [ebp-4h] - - v3 = DD; - v8 = guid; - if ( !ghDiabMod ) - { + if (ghDiabMod == NULL) { ghDiabMod = LoadLibrary("ddraw.dll"); - if ( !ghDiabMod ) - { - v4 = GetLastError(); - ErrDlg(IDD_DIALOG4, v4, "C:\\Src\\Diablo\\Source\\dx.cpp", 122); + if (ghDiabMod == NULL) { + ErrDlg(IDD_DIALOG4, GetLastError(), "C:\\Src\\Diablo\\Source\\dx.cpp", 122); } } - v5 = GetProcAddress(ghDiabMod, "DirectDrawCreate"); - if ( !v5 ) - { - v6 = GetLastError(); - ErrDlg(IDD_DIALOG4, v6, "C:\\Src\\Diablo\\Source\\dx.cpp", 127); + + HRESULT(WINAPI * DirectDrawCreate) + (LPGUID lpGuid, LPDIRECTDRAW * lplpDD, LPUNKNOWN pUnkOuter); + DirectDrawCreate = (HRESULT(WINAPI *)(LPGUID, LPDIRECTDRAW *, LPUNKNOWN))GetProcAddress(ghDiabMod, "DirectDrawCreate"); + if (DirectDrawCreate == NULL) { + ErrDlg(IDD_DIALOG4, GetLastError(), "C:\\Src\\Diablo\\Source\\dx.cpp", 127); } - return ((int (__stdcall *)(GUID *, IDirectDraw **, void *))v5)(v8, v3, unknown); + return DirectDrawCreate(guid, lplpDD, pUnkOuter); } void __fastcall j_lock_buf_priv(BYTE idx) { diff --git a/Source/dx.h b/Source/dx.h index 7afb6a161..811bf015e 100644 --- a/Source/dx.h +++ b/Source/dx.h @@ -22,7 +22,7 @@ void __cdecl dx_cleanup_mutex(); void __fastcall dx_init(HWND hWnd); void __cdecl dx_create_back_buffer(); void __cdecl dx_create_primary_surface(); -HRESULT __fastcall dx_DirectDrawCreate(GUID *guid, IDirectDraw **DD, void *unknown); +HRESULT __fastcall dx_DirectDrawCreate(LPGUID guid, LPDIRECTDRAW *lplpDD, LPUNKNOWN pUnkOuter); void __fastcall j_lock_buf_priv(BYTE idx); void __cdecl lock_buf_priv(); void __fastcall j_unlock_buf_priv(BYTE idx);