[oleaut32] Implement the ability to marshall VT_CARRAY's of user defined types.
Jeremy White
jwhite at codeweavers.com
Sat Oct 24 17:14:24 CDT 2009
Removed one todo_wine from the tmarshal tests.
---
dlls/oleaut32/tests/tmarshal.c | 2 --
dlls/oleaut32/tmarshal.c | 5 +++--
dlls/oleaut32/typelib.c | 2 +-
3 files changed, 4 insertions(+), 5 deletions(-)
diff --git a/dlls/oleaut32/tests/tmarshal.c b/dlls/oleaut32/tests/tmarshal.c
index 9b14613..c9ea77d 100644
--- a/dlls/oleaut32/tests/tmarshal.c
+++ b/dlls/oleaut32/tests/tmarshal.c
@@ -1078,9 +1078,7 @@ static void test_typelibmarshal(void)
mystruct = MYSTRUCT_BYPTR;
memcpy(mystructArray, MYSTRUCT_ARRAY, sizeof(mystructArray));
hr = IWidget_StructArgs(pWidget, MYSTRUCT_BYVAL, &mystruct, mystructArray);
- todo_wine {
ok_ole_success(hr, IWidget_StructArgs);
- }
/* call Clone */
dispparams.cNamedArgs = 0;
diff --git a/dlls/oleaut32/tmarshal.c b/dlls/oleaut32/tmarshal.c
index e81de94..acb8071 100644
--- a/dlls/oleaut32/tmarshal.c
+++ b/dlls/oleaut32/tmarshal.c
@@ -888,7 +888,7 @@ serialize_param(
if (debugout) TRACE_(olerelay)("(vt %s)",debugstr_vt(adesc->tdescElem.vt));
if (debugout) TRACE_(olerelay)("[");
for (i=0;i<arrsize;i++) {
- hres = serialize_param(tinfo, writeit, debugout, dealloc, &adesc->tdescElem, (DWORD*)((LPBYTE)arg+i*_xsize(&adesc->tdescElem, tinfo)), buf);
+ hres = serialize_param(tinfo, writeit, debugout, dealloc, &adesc->tdescElem, (DWORD*)((LPBYTE)(*arg)+i*_xsize(&adesc->tdescElem, tinfo)), buf);
if (hres)
return hres;
if (debugout && (i<arrsize-1)) TRACE_(olerelay)(",");
@@ -1247,6 +1247,7 @@ deserialize_param(
if (adesc->cDims > 1) FIXME("cDims > 1 in VT_CARRAY. Does it work?\n");
for (i=0;i<adesc->cDims;i++)
arrsize *= adesc->rgbounds[i].cElements;
+ *arg=(DWORD)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,_xsize(tdesc->u.lptdesc, tinfo) * arrsize);
for (i=0;i<arrsize;i++)
{
hres = deserialize_param(
@@ -1255,7 +1256,7 @@ deserialize_param(
debugout,
alloc,
&adesc->tdescElem,
- (DWORD*)((LPBYTE)(arg)+i*_xsize(&adesc->tdescElem, tinfo)),
+ (DWORD*)((LPBYTE)(*arg)+i*_xsize(&adesc->tdescElem, tinfo)),
buf
);
if (hres)
diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c
index 0bd9b19..9e25e77 100644
--- a/dlls/oleaut32/typelib.c
+++ b/dlls/oleaut32/typelib.c
@@ -2947,7 +2947,7 @@ static ITypeLib2* ITypeLib2_Constructor_MSFT(LPVOID pLib, DWORD dwTLBLength)
if(td[1]<0)
pTypeLibImpl->pTypeDesc[i].u.lpadesc->tdescElem.vt = td[0] & VT_TYPEMASK;
else
- pTypeLibImpl->pTypeDesc[i].u.lpadesc->tdescElem = stndTypeDesc[td[0]/8];
+ pTypeLibImpl->pTypeDesc[i].u.lpadesc->tdescElem = cx.pLibInfo->pTypeDesc[td[0]/(2*sizeof(INT))];
pTypeLibImpl->pTypeDesc[i].u.lpadesc->cDims = td[2];
--
1.5.6.5
More information about the wine-patches
mailing list