From 86d9457cdc0307e0594cd352c6c57c091e40d084 Mon Sep 17 00:00:00 2001 From: Huw Davies Date: Wed, 10 May 2006 12:11:22 +0100 Subject: [PATCH] oleaut32: Support VT_SAFEARRAY in the typelib marshaler. Based on a patch by Rob Shearman. --- dlls/oleaut32/tmarshal.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/dlls/oleaut32/tmarshal.c b/dlls/oleaut32/tmarshal.c index 0a6e9392f02..139662d3da2 100644 --- a/dlls/oleaut32/tmarshal.c +++ b/dlls/oleaut32/tmarshal.c @@ -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;