Module: wine Branch: master Commit: b8d7088e88d7c077c0c4ad1b2c4d7f3503e2806a URL: http://source.winehq.org/git/wine.git/?a=commit;h=b8d7088e88d7c077c0c4ad1b2c...
Author: Jeremy White jwhite@codeweavers.com Date: Sat Oct 24 17:29:02 2009 -0500
oleaut32: Implement the ability to marshall VT_CARRAY's of user defined types.
---
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 e7d7b89..b3d1734 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++) deserialize_param( tinfo, @@ -1254,7 +1255,7 @@ deserialize_param( debugout, alloc, &adesc->tdescElem, - (DWORD*)((LPBYTE)(arg)+i*_xsize(&adesc->tdescElem, tinfo)), + (DWORD*)((LPBYTE)(*arg)+i*_xsize(&adesc->tdescElem, tinfo)), buf ); return S_OK; 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];