Huw Davies : oleaut32: Support VT_SAFEARRAY in the typelib marshaler.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed May 10 12:56:47 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: 86d9457cdc0307e0594cd352c6c57c091e40d084
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=86d9457cdc0307e0594cd352c6c57c091e40d084
Author: Huw Davies <huw at codeweavers.com>
Date: Wed May 10 12:11:22 2006 +0100
oleaut32: Support VT_SAFEARRAY in the typelib marshaler.
Based on a patch by Rob Shearman.
---
dlls/oleaut32/tmarshal.c | 22 ++++++++++++++++++++++
1 files changed, 22 insertions(+), 0 deletions(-)
diff --git a/dlls/oleaut32/tmarshal.c b/dlls/oleaut32/tmarshal.c
index 0a6e939..139662d 100644
--- a/dlls/oleaut32/tmarshal.c
+++ b/dlls/oleaut32/tmarshal.c
@@ -42,6 +42,7 @@ #include "winreg.h"
#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;
More information about the wine-cvs
mailing list