Commit 86d9457c authored by Huw Davies's avatar Huw Davies Committed by Alexandre Julliard

oleaut32: Support VT_SAFEARRAY in the typelib marshaler.

Based on a patch by Rob Shearman.
parent d0bdf685
......@@ -42,6 +42,7 @@
#include "winuser.h"
#include "ole2.h"
#include "propidl.h" /* for LPSAFEARRAY_User* functions */
#include "typelib.h"
#include "variant.h"
#include "wine/debug.h"
......@@ -802,6 +803,17 @@ serialize_param(
if (debugout) TRACE_(olerelay)("]");
return S_OK;
}
case VT_SAFEARRAY: {
if (writeit)
{
unsigned long flags = MAKELONG(MSHCTX_DIFFERENTMACHINE, NDR_LOCAL_DATA_REPRESENTATION);
unsigned long size = LPSAFEARRAY_UserSize(&flags, buf->curoff, (LPSAFEARRAY *)arg);
xbuf_resize(buf, size);
LPSAFEARRAY_UserMarshal(&flags, buf->base + buf->curoff, (LPSAFEARRAY *)arg);
buf->curoff = size;
}
return S_OK;
}
default:
ERR("Unhandled marshal type %d.\n",tdesc->vt);
return S_OK;
......@@ -1131,6 +1143,16 @@ deserialize_param(
);
return S_OK;
}
case VT_SAFEARRAY: {
if (readit)
{
unsigned long flags = MAKELONG(MSHCTX_DIFFERENTMACHINE, NDR_LOCAL_DATA_REPRESENTATION);
unsigned char *buffer;
buffer = LPSAFEARRAY_UserUnmarshal(&flags, buf->base + buf->curoff, (LPSAFEARRAY *)arg);
buf->curoff = buffer - buf->base;
}
return S_OK;
}
default:
ERR("No handler for VT type %d!\n",tdesc->vt);
return S_OK;
......
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