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