Octavian Voicu : oleaut32: Add tmarshal test with variant array and fix variant marshalled size calculation .

Alexandre Julliard julliard at winehq.org
Wed Sep 21 13:35:16 CDT 2011


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

Author: Octavian Voicu <octavian.voicu at gmail.com>
Date:   Wed Sep 21 18:37:22 2011 +0300

oleaut32: Add tmarshal test with variant array and fix variant marshalled size calculation.

---

 dlls/oleaut32/tests/tmarshal.c         |   47 ++++++++++++++++++++++++++++++++
 dlls/oleaut32/tests/tmarshal.idl       |    3 ++
 dlls/oleaut32/tests/tmarshal_dispids.h |    1 +
 dlls/oleaut32/tmarshal.c               |    2 +-
 4 files changed, 52 insertions(+), 1 deletions(-)

diff --git a/dlls/oleaut32/tests/tmarshal.c b/dlls/oleaut32/tests/tmarshal.c
index c84aa47..c2fa3b4 100644
--- a/dlls/oleaut32/tests/tmarshal.c
+++ b/dlls/oleaut32/tests/tmarshal.c
@@ -475,6 +475,40 @@ static HRESULT WINAPI Widget_VariantArrayPtr(
     return S_OK;
 }
 
+static HRESULT WINAPI Widget_VariantCArray(
+    IWidget * iface,
+    ULONG count,
+    VARIANT values[])
+{
+    ULONG i;
+    VARIANT inc, res;
+    HRESULT hr;
+
+    trace("VariantCArray(%u,%p)\n", count, values);
+
+    ok(count == 2, "count is %d\n", count);
+    for (i = 0; i < count; i++)
+        ok(V_VT(&values[i]) == VT_I4, "values[%d] is not VT_I4\n", i);
+
+    V_VT(&inc) = VT_I4;
+    V_I4(&inc) = 1;
+    for (i = 0; i < count; i++) {
+        VariantInit(&res);
+        hr = VarAdd(&values[i], &inc, &res);
+        if (!SUCCEEDED(hr)) {
+            ok(0, "VarAdd failed at %u with error 0x%x\n", i, hr);
+            return hr;
+        }
+        hr = VariantCopy(&values[i], &res);
+        if (!SUCCEEDED(hr)) {
+            ok(0, "VariantCopy failed at %u with error 0x%x\n", i, hr);
+            return hr;
+        }
+    }
+
+    return S_OK;
+}
+
 static HRESULT WINAPI Widget_Variant(
     IWidget __RPC_FAR * iface,
     VARIANT var)
@@ -640,6 +674,7 @@ static const struct IWidgetVtbl Widget_VTable =
     Widget_Value,
     Widget_Array,
     Widget_VariantArrayPtr,
+    Widget_VariantCArray,
     Widget_Variant,
     Widget_VarArg,
     Widget_StructArgs,
@@ -1230,6 +1265,18 @@ static void test_typelibmarshal(void)
     ok_ole_success(hr, IDispatch_Invoke);
     VariantClear(&varresult);
 
+    /* call VariantCArray - test marshaling of variant arrays */
+    V_VT(&vararg[0]) = VT_I4;
+    V_I4(&vararg[0]) = 1;
+    V_VT(&vararg[1]) = VT_I4;
+    V_I4(&vararg[1]) = 2;
+    hr = IWidget_VariantCArray(pWidget, 2, vararg);
+    ok_ole_success(hr, IWidget_VariantCArray);
+    todo_wine
+    ok(V_VT(&vararg[0]) == VT_I4 && V_I4(&vararg[0]) == 2, "vararg[0] = %d[%d]\n", V_VT(&vararg[0]), V_I4(&vararg[0]));
+    todo_wine
+    ok(V_VT(&vararg[1]) == VT_I4 && V_I4(&vararg[1]) == 3, "vararg[1] = %d[%d]\n", V_VT(&vararg[1]), V_I4(&vararg[1]));
+
     /* call VarArg */
     VariantInit(&vararg[3]);
     V_VT(&vararg[3]) = VT_I4;
diff --git a/dlls/oleaut32/tests/tmarshal.idl b/dlls/oleaut32/tests/tmarshal.idl
index 7616789..30b6d8f 100644
--- a/dlls/oleaut32/tests/tmarshal.idl
+++ b/dlls/oleaut32/tests/tmarshal.idl
@@ -111,6 +111,9 @@ library TestTypelib
         [id(DISPID_TM_VARARRAYPTR)]
         HRESULT VariantArrayPtr([in] SAFEARRAY(VARIANT) *values);
 
+        [id(DISPID_TM_VARCARRAY)]
+        HRESULT VariantCArray([in] ULONG count, [in, out] VARIANT values[2]);
+
         [id(DISPID_TM_VARIANT)]
         HRESULT Variant([in] VARIANT var);
 
diff --git a/dlls/oleaut32/tests/tmarshal_dispids.h b/dlls/oleaut32/tests/tmarshal_dispids.h
index 376162b..0e49505 100644
--- a/dlls/oleaut32/tests/tmarshal_dispids.h
+++ b/dlls/oleaut32/tests/tmarshal_dispids.h
@@ -40,6 +40,7 @@
 #define DISPID_TM_BYREF_UINT 21
 #define DISPID_TM_PROP_OPT_ARG 22
 #define DISPID_TM_PROP_REQ_ARG 23
+#define DISPID_TM_VARCARRAY 24
 
 #define DISPID_NOA_BSTRRET 1
 #define DISPID_NOA_ERROR 2
diff --git a/dlls/oleaut32/tmarshal.c b/dlls/oleaut32/tmarshal.c
index 25f0a0a..1549d97 100644
--- a/dlls/oleaut32/tmarshal.c
+++ b/dlls/oleaut32/tmarshal.c
@@ -597,7 +597,7 @@ _xsize(const TYPEDESC *td, ITypeInfo *tinfo) {
     case VT_CY:
         return sizeof(CY);
     case VT_VARIANT:
-	return sizeof(VARIANT)+3; /* FIXME: why the +3? */
+	return sizeof(VARIANT);
     case VT_CARRAY: {
 	int i, arrsize = 1;
 	const ARRAYDESC *adesc = td->u.lpadesc;




More information about the wine-cvs mailing list