diff --git a/ddraw.def b/ddraw.def index fe68c2c..e947b1e 100644 --- a/ddraw.def +++ b/ddraw.def @@ -5,6 +5,9 @@ EXPORTS DirectDrawCreateClipper @9 DirectDrawCreateEx @10 DirectDrawEnumerateA @11 + DirectDrawEnumerateExA @12 + DirectDrawEnumerateExW @13 + DirectDrawEnumerateW @14 GameHandlesClose DATA NvOptimusEnablement DATA AmdPowerXpressRequestHighPerformance DATA diff --git a/inc/IDirectDraw.h b/inc/IDirectDraw.h index b9d7550..b7658a0 100644 --- a/inc/IDirectDraw.h +++ b/inc/IDirectDraw.h @@ -9,6 +9,9 @@ DEFINE_GUID(IID_IDirectDraw4, 0x9c59509a, 0x39bd, 0x11d1, 0x8c, 0x4a, 0x00, 0xc0, 0x4f, 0xd9, 0x30, 0xc5); DEFINE_GUID(IID_IDirectDraw7, 0x15e65ec0, 0x3b9c, 0x11d2, 0xb9, 0x2f, 0x00, 0x60, 0x97, 0x97, 0xea, 0x5b); +typedef BOOL(FAR PASCAL* LPDDENUMCALLBACKEXA)(GUID FAR*, LPSTR, LPSTR, LPVOID, HMONITOR); +typedef BOOL(FAR PASCAL* LPDDENUMCALLBACKEXW)(GUID FAR*, LPWSTR, LPWSTR, LPVOID, HMONITOR); + extern struct IDirectDrawImplVtbl g_dd_vtbl1; extern struct IDirectDrawImplVtbl g_dd_vtblx; diff --git a/src/IDirectDraw/IDirectDraw.c b/src/IDirectDraw/IDirectDraw.c index 3e2cf79..fdeb35d 100644 --- a/src/IDirectDraw/IDirectDraw.c +++ b/src/IDirectDraw/IDirectDraw.c @@ -291,16 +291,16 @@ HRESULT __stdcall IDirectDraw__GetSurfaceFromDC(IDirectDrawImpl* This, HDC hdc, HRESULT __stdcall IDirectDraw__RestoreAllSurfaces(IDirectDrawImpl* This) { dprintf("NOT_IMPLEMENTED -> %s(This=%p)\n", __FUNCTION__, This); - HRESULT ret = DDERR_INVALIDOBJECT; + HRESULT ret = DD_OK; dprintf("NOT_IMPLEMENTED <- %s\n", __FUNCTION__); return ret; } HRESULT __stdcall IDirectDraw__TestCooperativeLevel(IDirectDrawImpl* This) { - dprintf("NOT_IMPLEMENTED -> %s(This=%p)\n", __FUNCTION__, This); - HRESULT ret = DDERR_INVALIDOBJECT; - dprintf("NOT_IMPLEMENTED <- %s\n", __FUNCTION__); + dprintfex("NOT_IMPLEMENTED -> %s(This=%p)\n", __FUNCTION__, This); + HRESULT ret = DD_OK; + dprintfex("NOT_IMPLEMENTED <- %s\n", __FUNCTION__); return ret; } diff --git a/src/IDirectDraw/IDirectDrawSurface.c b/src/IDirectDraw/IDirectDrawSurface.c index b8279a2..f50cc30 100644 --- a/src/IDirectDraw/IDirectDrawSurface.c +++ b/src/IDirectDraw/IDirectDrawSurface.c @@ -260,9 +260,9 @@ HRESULT __stdcall IDirectDrawSurface__Lock(IDirectDrawSurfaceImpl *This, LPRECT HRESULT __stdcall IDirectDrawSurface__ReleaseDC(IDirectDrawSurfaceImpl *This, HDC a) { - dprintfex("NOT_IMPLEMENTED -> %s(This=%p)\n", __FUNCTION__, This); + dprintfex("-> %s(This=%p)\n", __FUNCTION__, This); HRESULT ret = DD_OK; - dprintfex("NOT_IMPLEMENTED <- %s\n", __FUNCTION__); + dprintfex("<- %s\n", __FUNCTION__); return ret; } diff --git a/src/dllmain.c b/src/dllmain.c index fe6fcaa..ad3c7d1 100644 --- a/src/dllmain.c +++ b/src/dllmain.c @@ -2,6 +2,7 @@ #include #include #include "dllmain.h" +#include "IDirectDraw.h" #include "dd.h" #include "ddclipper.h" #include "debug.h" @@ -115,15 +116,12 @@ BOOL WINAPI DllMain(HANDLE hDll, DWORD dwReason, LPVOID lpReserved) return TRUE; } -HRESULT WINAPI DirectDrawEnumerateA(LPDDENUMCALLBACK lpCallback, LPVOID lpContext) +HRESULT WINAPI DirectDrawCreate(GUID FAR* lpGUID, LPDIRECTDRAW FAR* lplpDD, IUnknown FAR* pUnkOuter) { - dprintf("-> %s(lpCallback=%p, lpContext=%p)\n", __FUNCTION__, lpCallback, lpContext); - - if (lpCallback) - lpCallback(NULL, "display", "(null)", lpContext); - + dprintf("-> %s(lpGUID=%p, lplpDD=%p, pUnkOuter=%p)\n", __FUNCTION__, lpGUID, lplpDD, pUnkOuter); + HRESULT ret = dd_CreateEx(lpGUID, (LPVOID*)lplpDD, &IID_IDirectDraw, pUnkOuter); dprintf("<- %s\n", __FUNCTION__); - return DD_OK; + return ret; } HRESULT WINAPI DirectDrawCreateClipper(DWORD dwFlags, LPDIRECTDRAWCLIPPER FAR* lplpDDClipper, IUnknown FAR* pUnkOuter) @@ -134,14 +132,6 @@ HRESULT WINAPI DirectDrawCreateClipper(DWORD dwFlags, LPDIRECTDRAWCLIPPER FAR* l return ret; } -HRESULT WINAPI DirectDrawCreate(GUID FAR* lpGUID, LPDIRECTDRAW FAR* lplpDD, IUnknown FAR* pUnkOuter) -{ - dprintf("-> %s(lpGUID=%p, lplpDD=%p, pUnkOuter=%p)\n", __FUNCTION__, lpGUID, lplpDD, pUnkOuter); - HRESULT ret = dd_CreateEx(lpGUID, (LPVOID*)lplpDD, &IID_IDirectDraw, pUnkOuter); - dprintf("<- %s\n", __FUNCTION__); - return ret; -} - HRESULT WINAPI DirectDrawCreateEx(GUID* lpGuid, LPVOID* lplpDD, REFIID iid, IUnknown* pUnkOuter) { dprintf("-> %s(lpGUID=%p, lplpDD=%p, riid=%08X, pUnkOuter=%p)\n", __FUNCTION__, lpGuid, lplpDD, iid, pUnkOuter); @@ -149,3 +139,47 @@ HRESULT WINAPI DirectDrawCreateEx(GUID* lpGuid, LPVOID* lplpDD, REFIID iid, IUnk dprintf("<- %s\n", __FUNCTION__); return ret; } + +HRESULT WINAPI DirectDrawEnumerateA(LPDDENUMCALLBACK lpCallback, LPVOID lpContext) +{ + dprintf("-> %s(lpCallback=%p, lpContext=%p)\n", __FUNCTION__, lpCallback, lpContext); + + if (lpCallback) + lpCallback(NULL, "display", "(null)", lpContext); + + dprintf("<- %s\n", __FUNCTION__); + return DD_OK; +} + +HRESULT DirectDrawEnumerateExA(LPDDENUMCALLBACKEXA lpCallback, LPVOID lpContext, DWORD dwFlags) +{ + dprintf("-> %s(lpCallback=%p, lpContext=%p, dwFlags=%d)\n", __FUNCTION__, lpCallback, lpContext, dwFlags); + + if (lpCallback) + lpCallback(NULL, "display", "(null)", lpContext, NULL); + + dprintf("<- %s\n", __FUNCTION__); + return DD_OK; +} + +HRESULT WINAPI DirectDrawEnumerateExW(LPDDENUMCALLBACKEXW lpCallback, LPVOID lpContext, DWORD dwFlags) +{ + dprintf("-> %s(lpCallback=%p, lpContext=%p, dwFlags=%d)\n", __FUNCTION__, lpCallback, lpContext, dwFlags); + + if (lpCallback) + lpCallback(NULL, L"display", L"(null)", lpContext, NULL); + + dprintf("<- %s\n", __FUNCTION__); + return DD_OK; +} + +HRESULT WINAPI DirectDrawEnumerateW(LPDDENUMCALLBACKW lpCallback, LPVOID lpContext) +{ + dprintf("-> %s(lpCallback=%p, lpContext=%p)\n", __FUNCTION__, lpCallback, lpContext); + + if (lpCallback) + lpCallback(NULL, L"display", L"(null)", lpContext); + + dprintf("<- %s\n", __FUNCTION__); + return DD_OK; +}