Huw Davies : ole32: Implement TYMED_ISTORAGE marshalling.

Alexandre Julliard julliard at winehq.org
Mon May 18 08:13:16 CDT 2009


Module: wine
Branch: master
Commit: c36826705c99f9700b9d6b5e6453656c0f17390f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c36826705c99f9700b9d6b5e6453656c0f17390f

Author: Huw Davies <huw at codeweavers.com>
Date:   Thu May 14 14:50:12 2009 +0100

ole32: Implement TYMED_ISTORAGE marshalling.

---

 dlls/ole32/usrmarshal.c |   12 +++++++++---
 1 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/dlls/ole32/usrmarshal.c b/dlls/ole32/usrmarshal.c
index f3e87c4..1337a39 100644
--- a/dlls/ole32/usrmarshal.c
+++ b/dlls/ole32/usrmarshal.c
@@ -1786,7 +1786,10 @@ ULONG __RPC_USER STGMEDIUM_UserSize(ULONG *pFlags, ULONG StartingSize, STGMEDIUM
         TRACE("TYMED_ISTORAGE\n");
         if (pStgMedium->u.pstg)
         {
-            FIXME("not implemented for IStorage %p\n", pStgMedium->u.pstg);
+            IUnknown *unk;
+            IStorage_QueryInterface(pStgMedium->u.pstg, &IID_IUnknown, (void**)&unk);
+            size = WdtpInterfacePointer_UserSize(pFlags, LOWORD(*pFlags), size, unk, &IID_IStorage);
+            IUnknown_Release(unk);
         }
         break;
     case TYMED_GDI:
@@ -1895,7 +1898,10 @@ unsigned char * __RPC_USER STGMEDIUM_UserMarshal(ULONG *pFlags, unsigned char *p
         TRACE("TYMED_ISTORAGE\n");
         if (pStgMedium->u.pstg)
         {
-            FIXME("not implemented for IStorage %p\n", pStgMedium->u.pstg);
+            IUnknown *unk;
+            IStorage_QueryInterface(pStgMedium->u.pstg, &IID_IUnknown, (void**)&unk);
+            pBuffer = WdtpInterfacePointer_UserMarshal(pFlags, LOWORD(*pFlags), pBuffer, unk, &IID_IStorage);
+            IUnknown_Release(unk);
         }
         break;
     case TYMED_GDI:
@@ -2025,7 +2031,7 @@ unsigned char * __RPC_USER STGMEDIUM_UserUnmarshal(ULONG *pFlags, unsigned char
         TRACE("TYMED_ISTORAGE\n");
         if (content)
         {
-            FIXME("not implemented for IStorage\n");
+            pBuffer = WdtpInterfacePointer_UserUnmarshal(pFlags, pBuffer, (IUnknown**)&pStgMedium->u.pstg, &IID_IStorage);
         }
         else
             pStgMedium->u.pstg = NULL;




More information about the wine-cvs mailing list