Andrew Nguyen : ddraw: Implement and test DirectDrawEnumerateExW.

Alexandre Julliard julliard at winehq.org
Fri Oct 9 09:24:10 CDT 2009


Module: wine
Branch: master
Commit: 7211f7ce183076bceb01fa176e0630b5df5a8d7f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=7211f7ce183076bceb01fa176e0630b5df5a8d7f

Author: Andrew Nguyen <arethusa26 at gmail.com>
Date:   Thu Oct  8 09:04:18 2009 -0500

ddraw: Implement and test DirectDrawEnumerateExW.

---

 dlls/ddraw/ddraw.spec         |    2 +-
 dlls/ddraw/main.c             |   15 +++++++++---
 dlls/ddraw/tests/ddrawmodes.c |   47 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 59 insertions(+), 5 deletions(-)

diff --git a/dlls/ddraw/ddraw.spec b/dlls/ddraw/ddraw.spec
index 3b3916e..7575091 100644
--- a/dlls/ddraw/ddraw.spec
+++ b/dlls/ddraw/ddraw.spec
@@ -8,7 +8,7 @@
 @ stdcall DirectDrawCreateEx(ptr ptr ptr ptr)
 @ stdcall DirectDrawEnumerateA(ptr ptr)
 @ stdcall DirectDrawEnumerateExA(ptr ptr long)
-@ stub DirectDrawEnumerateExW
+@ stdcall DirectDrawEnumerateExW(ptr ptr long)
 @ stdcall DirectDrawEnumerateW(ptr ptr)
 @ stdcall -private DllCanUnloadNow()
 @ stdcall -private DllGetClassObject(ptr ptr ptr)
diff --git a/dlls/ddraw/main.c b/dlls/ddraw/main.c
index 137bb44..2a0d8f0 100644
--- a/dlls/ddraw/main.c
+++ b/dlls/ddraw/main.c
@@ -456,12 +456,19 @@ DirectDrawEnumerateW(LPDDENUMCALLBACKW Callback,
 /***********************************************************************
  * DirectDrawEnumerateExW (DDRAW.@)
  *
- * Enumerates DirectDraw7 drivers, unicode version. See
- * the comments above DirectDrawEnumerateA for more details.
- *
- * The Flag member is not supported right now.
+ * Enumerates DirectDraw7 drivers, unicode version.
+ * This function is not implemented on Windows.
  *
  ***********************************************************************/
+HRESULT WINAPI
+DirectDrawEnumerateExW(LPDDENUMCALLBACKEXW Callback,
+                       LPVOID Context,
+                       DWORD Flags)
+{
+    TRACE("(%p, %p, 0x%x)\n", Callback, Context, Flags);
+
+    return DDERR_UNSUPPORTED;
+}
 
 /***********************************************************************
  * Classfactory implementation.
diff --git a/dlls/ddraw/tests/ddrawmodes.c b/dlls/ddraw/tests/ddrawmodes.c
index a095063..7ea4d53 100644
--- a/dlls/ddraw/tests/ddrawmodes.c
+++ b/dlls/ddraw/tests/ddrawmodes.c
@@ -41,6 +41,7 @@ static LPDDSURFACEDESC modes;
 static HRESULT (WINAPI *pDirectDrawEnumerateA)(LPDDENUMCALLBACKA,LPVOID);
 static HRESULT (WINAPI *pDirectDrawEnumerateW)(LPDDENUMCALLBACKW,LPVOID);
 static HRESULT (WINAPI *pDirectDrawEnumerateExA)(LPDDENUMCALLBACKEXA,LPVOID,DWORD);
+static HRESULT (WINAPI *pDirectDrawEnumerateExW)(LPDDENUMCALLBACKEXW,LPVOID,DWORD);
 
 static void init_function_pointers(void)
 {
@@ -48,6 +49,7 @@ static void init_function_pointers(void)
     pDirectDrawEnumerateA = (void*)GetProcAddress(hmod, "DirectDrawEnumerateA");
     pDirectDrawEnumerateW = (void*)GetProcAddress(hmod, "DirectDrawEnumerateW");
     pDirectDrawEnumerateExA = (void*)GetProcAddress(hmod, "DirectDrawEnumerateExA");
+    pDirectDrawEnumerateExW = (void*)GetProcAddress(hmod, "DirectDrawEnumerateExW");
 }
 
 static void createwindow(void)
@@ -273,6 +275,50 @@ static void test_DirectDrawEnumerateExA(void)
     ok(ret == DD_OK, "Expected DD_OK, got %d\n", ret);
 }
 
+static BOOL WINAPI test_callbackExW(GUID *lpGUID, LPWSTR lpDriverDescription,
+                                    LPWSTR lpDriverName, LPVOID lpContext,
+                                    HMONITOR hm)
+{
+    ok(0, "The callback should not be invoked by DirectDrawEnumerateExW.\n");
+    return TRUE;
+}
+
+static void test_DirectDrawEnumerateExW(void)
+{
+    HRESULT ret;
+
+    if (!pDirectDrawEnumerateExW)
+    {
+        win_skip("DirectDrawEnumerateExW is not available\n");
+        return;
+    }
+
+    /* DirectDrawEnumerateExW is not implemented on Windows. */
+
+    /* Test with NULL callback parameter. */
+    ret = pDirectDrawEnumerateExW(NULL, NULL, 0);
+    ok(ret == DDERR_UNSUPPORTED, "Expected DDERR_UNSUPPORTED, got %d\n", ret);
+
+    /* Test with invalid callback parameter. */
+    ret = pDirectDrawEnumerateExW((LPDDENUMCALLBACKEXW)0xdeadbeef, NULL, 0);
+    ok(ret == DDERR_UNSUPPORTED, "Expected DDERR_UNSUPPORTED, got %d\n", ret);
+
+    /* Test with valid callback parameter and invalid flags */
+    ret = pDirectDrawEnumerateExW(test_callbackExW, NULL, ~0);
+    ok(ret == DDERR_UNSUPPORTED, "Expected DDERR_UNSUPPORTED, got %d\n", ret);
+
+    /* Test with valid callback parameter and NULL context parameter. */
+    ret = pDirectDrawEnumerateExW(test_callbackExW, NULL, 0);
+    ok(ret == DDERR_UNSUPPORTED, "Expected DDERR_UNSUPPORTED, got %d\n", ret);
+
+    /* Test with valid callback parameter, NULL context parameter, and all flags set. */
+    ret = pDirectDrawEnumerateExW(test_callbackExW, NULL,
+                                  DDENUM_ATTACHEDSECONDARYDEVICES |
+                                  DDENUM_DETACHEDSECONDARYDEVICES |
+                                  DDENUM_NONDISPLAYDEVICES);
+    ok(ret == DDERR_UNSUPPORTED, "Expected DDERR_UNSUPPORTED, got %d\n", ret);
+}
+
 static void adddisplaymode(LPDDSURFACEDESC lpddsd)
 {
     if (!modes)
@@ -603,6 +649,7 @@ START_TEST(ddrawmodes)
     test_DirectDrawEnumerateA();
     test_DirectDrawEnumerateW();
     test_DirectDrawEnumerateExA();
+    test_DirectDrawEnumerateExW();
 
     enumdisplaymodes();
     if (winetest_interactive)




More information about the wine-cvs mailing list