Commit b8d7088e authored by Jeremy White's avatar Jeremy White Committed by Alexandre Julliard

oleaut32: Implement the ability to marshall VT_CARRAY's of user defined types.

parent 1e0b8367
...@@ -1078,9 +1078,7 @@ static void test_typelibmarshal(void) ...@@ -1078,9 +1078,7 @@ static void test_typelibmarshal(void)
mystruct = MYSTRUCT_BYPTR; mystruct = MYSTRUCT_BYPTR;
memcpy(mystructArray, MYSTRUCT_ARRAY, sizeof(mystructArray)); memcpy(mystructArray, MYSTRUCT_ARRAY, sizeof(mystructArray));
hr = IWidget_StructArgs(pWidget, MYSTRUCT_BYVAL, &mystruct, mystructArray); hr = IWidget_StructArgs(pWidget, MYSTRUCT_BYVAL, &mystruct, mystructArray);
todo_wine {
ok_ole_success(hr, IWidget_StructArgs); ok_ole_success(hr, IWidget_StructArgs);
}
/* call Clone */ /* call Clone */
dispparams.cNamedArgs = 0; dispparams.cNamedArgs = 0;
......
...@@ -888,7 +888,7 @@ serialize_param( ...@@ -888,7 +888,7 @@ serialize_param(
if (debugout) TRACE_(olerelay)("(vt %s)",debugstr_vt(adesc->tdescElem.vt)); if (debugout) TRACE_(olerelay)("(vt %s)",debugstr_vt(adesc->tdescElem.vt));
if (debugout) TRACE_(olerelay)("["); if (debugout) TRACE_(olerelay)("[");
for (i=0;i<arrsize;i++) { 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) if (hres)
return hres; return hres;
if (debugout && (i<arrsize-1)) TRACE_(olerelay)(","); if (debugout && (i<arrsize-1)) TRACE_(olerelay)(",");
...@@ -1247,6 +1247,7 @@ deserialize_param( ...@@ -1247,6 +1247,7 @@ deserialize_param(
if (adesc->cDims > 1) FIXME("cDims > 1 in VT_CARRAY. Does it work?\n"); if (adesc->cDims > 1) FIXME("cDims > 1 in VT_CARRAY. Does it work?\n");
for (i=0;i<adesc->cDims;i++) for (i=0;i<adesc->cDims;i++)
arrsize *= adesc->rgbounds[i].cElements; arrsize *= adesc->rgbounds[i].cElements;
*arg=(DWORD)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,_xsize(tdesc->u.lptdesc, tinfo) * arrsize);
for (i=0;i<arrsize;i++) for (i=0;i<arrsize;i++)
deserialize_param( deserialize_param(
tinfo, tinfo,
...@@ -1254,7 +1255,7 @@ deserialize_param( ...@@ -1254,7 +1255,7 @@ deserialize_param(
debugout, debugout,
alloc, alloc,
&adesc->tdescElem, &adesc->tdescElem,
(DWORD*)((LPBYTE)(arg)+i*_xsize(&adesc->tdescElem, tinfo)), (DWORD*)((LPBYTE)(*arg)+i*_xsize(&adesc->tdescElem, tinfo)),
buf buf
); );
return S_OK; return S_OK;
......
...@@ -2947,7 +2947,7 @@ static ITypeLib2* ITypeLib2_Constructor_MSFT(LPVOID pLib, DWORD dwTLBLength) ...@@ -2947,7 +2947,7 @@ static ITypeLib2* ITypeLib2_Constructor_MSFT(LPVOID pLib, DWORD dwTLBLength)
if(td[1]<0) if(td[1]<0)
pTypeLibImpl->pTypeDesc[i].u.lpadesc->tdescElem.vt = td[0] & VT_TYPEMASK; pTypeLibImpl->pTypeDesc[i].u.lpadesc->tdescElem.vt = td[0] & VT_TYPEMASK;
else 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]; pTypeLibImpl->pTypeDesc[i].u.lpadesc->cDims = td[2];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment