Module: wine Branch: master Commit: c36826705c99f9700b9d6b5e6453656c0f17390f URL: http://source.winehq.org/git/wine.git/?a=commit;h=c36826705c99f9700b9d6b5e64...
Author: Huw Davies huw@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;