Jacek Caban : wmp: Added IPersistStreamInit stub implementation.

Alexandre Julliard julliard at winehq.org
Thu Feb 6 13:25:31 CST 2014


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Feb  6 11:38:09 2014 +0100

wmp: Added IPersistStreamInit stub implementation.

---

 dlls/wmp/oleobj.c       |   89 +++++++++++++++++++++++++++++++++++++++++++++++
 dlls/wmp/tests/oleobj.c |   17 +++++++++
 2 files changed, 106 insertions(+)

diff --git a/dlls/wmp/oleobj.c b/dlls/wmp/oleobj.c
index 79a21ca..380ae1f 100644
--- a/dlls/wmp/oleobj.c
+++ b/dlls/wmp/oleobj.c
@@ -25,6 +25,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(wmp);
 struct WindowsMediaPlayer {
     IOleObject IOleObject_iface;
     IProvideClassInfo2 IProvideClassInfo2_iface;
+    IPersistStreamInit IPersistStreamInit_iface;
+
     LONG ref;
 };
 
@@ -49,6 +51,12 @@ static HRESULT WINAPI OleObject_QueryInterface(IOleObject *iface, REFIID riid, v
     }else if(IsEqualGUID(riid, &IID_IProvideClassInfo2)) {
         TRACE("(%p)->(IID_IProvideClassInfo2 %p)\n", This, ppv);
         *ppv = &This->IProvideClassInfo2_iface;
+    }else if(IsEqualGUID(riid, &IID_IPersist)) {
+        TRACE("(%p)->(IID_IPersist %p)\n", This, ppv);
+        *ppv = &This->IPersistStreamInit_iface;
+    }else if(IsEqualGUID(riid, &IID_IPersistStreamInit)) {
+        TRACE("(%p)->(IID_IPersistStreamInit %p)\n", This, ppv);
+        *ppv = &This->IPersistStreamInit_iface;
     }else {
         FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
         *ppv = NULL;
@@ -311,6 +319,86 @@ static const IProvideClassInfo2Vtbl ProvideClassInfo2Vtbl = {
     ProvideClassInfo2_GetGUID
 };
 
+static inline WindowsMediaPlayer *impl_from_IPersistStreamInit(IPersistStreamInit *iface)
+{
+    return CONTAINING_RECORD(iface, WindowsMediaPlayer, IPersistStreamInit_iface);
+}
+
+static HRESULT WINAPI PersistStreamInit_QueryInterface(IPersistStreamInit *iface,
+                                                       REFIID riid, void **ppv)
+{
+    WindowsMediaPlayer *This = impl_from_IPersistStreamInit(iface);
+    return IOleObject_QueryInterface(&This->IOleObject_iface, riid, ppv);
+}
+
+static ULONG WINAPI PersistStreamInit_AddRef(IPersistStreamInit *iface)
+{
+    WindowsMediaPlayer *This = impl_from_IPersistStreamInit(iface);
+    return IOleObject_AddRef(&This->IOleObject_iface);
+}
+
+static ULONG WINAPI PersistStreamInit_Release(IPersistStreamInit *iface)
+{
+    WindowsMediaPlayer *This = impl_from_IPersistStreamInit(iface);
+    return IOleObject_Release(&This->IOleObject_iface);
+}
+
+static HRESULT WINAPI PersistStreamInit_GetClassID(IPersistStreamInit *iface, CLSID *pClassID)
+{
+    WindowsMediaPlayer *This = impl_from_IPersistStreamInit(iface);
+    FIXME("(%p)->(%p)\n", This, pClassID);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI PersistStreamInit_IsDirty(IPersistStreamInit *iface)
+{
+    WindowsMediaPlayer *This = impl_from_IPersistStreamInit(iface);
+    FIXME("(%p)\n", This);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI PersistStreamInit_Load(IPersistStreamInit *iface, LPSTREAM pStm)
+{
+    WindowsMediaPlayer *This = impl_from_IPersistStreamInit(iface);
+    FIXME("(%p)->(%p)\n", This, pStm);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI PersistStreamInit_Save(IPersistStreamInit *iface, LPSTREAM pStm,
+                                             BOOL fClearDirty)
+{
+    WindowsMediaPlayer *This = impl_from_IPersistStreamInit(iface);
+    FIXME("(%p)->(%p %x)\n", This, pStm, fClearDirty);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI PersistStreamInit_GetSizeMax(IPersistStreamInit *iface,
+                                                   ULARGE_INTEGER *pcbSize)
+{
+    WindowsMediaPlayer *This = impl_from_IPersistStreamInit(iface);
+    FIXME("(%p)->(%p)\n", This, pcbSize);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI PersistStreamInit_InitNew(IPersistStreamInit *iface)
+{
+    WindowsMediaPlayer *This = impl_from_IPersistStreamInit(iface);
+    FIXME("(%p)\n", This);
+    return E_NOTIMPL;
+}
+
+static const IPersistStreamInitVtbl PersistStreamInitVtbl = {
+    PersistStreamInit_QueryInterface,
+    PersistStreamInit_AddRef,
+    PersistStreamInit_Release,
+    PersistStreamInit_GetClassID,
+    PersistStreamInit_IsDirty,
+    PersistStreamInit_Load,
+    PersistStreamInit_Save,
+    PersistStreamInit_GetSizeMax,
+    PersistStreamInit_InitNew
+};
+
 HRESULT WINAPI WMPFactory_CreateInstance(IClassFactory *iface, IUnknown *outer,
         REFIID riid, void **ppv)
 {
@@ -325,6 +413,7 @@ HRESULT WINAPI WMPFactory_CreateInstance(IClassFactory *iface, IUnknown *outer,
 
     wmp->IOleObject_iface.lpVtbl = &OleObjectVtbl;
     wmp->IProvideClassInfo2_iface.lpVtbl = &ProvideClassInfo2Vtbl;
+    wmp->IPersistStreamInit_iface.lpVtbl = &PersistStreamInitVtbl;
 
     wmp->ref = 1;
 
diff --git a/dlls/wmp/tests/oleobj.c b/dlls/wmp/tests/oleobj.c
index 45dea43..3f105f4 100644
--- a/dlls/wmp/tests/oleobj.c
+++ b/dlls/wmp/tests/oleobj.c
@@ -24,9 +24,19 @@
 
 #include "wine/test.h"
 
+static void test_QI(IUnknown *unk)
+{
+    IUnknown *tmp;
+    HRESULT hres;
+
+    hres = IUnknown_QueryInterface(unk, &IID_IQuickActivate, (void**)&tmp);
+    ok(hres == E_NOINTERFACE, "Got IQuickActivate iface when no expected\n");
+}
+
 static void test_wmp(void)
 {
     IProvideClassInfo2 *class_info;
+    IPersistStreamInit *psi;
     IOleObject *oleobj;
     GUID guid;
     LONG ref;
@@ -48,6 +58,13 @@ static void test_wmp(void)
 
     IProvideClassInfo2_Release(class_info);
 
+    test_QI((IUnknown*)oleobj);
+
+    hres = IOleObject_QueryInterface(oleobj, &IID_IPersistStreamInit, (void**)&psi);
+    ok(hres == S_OK, "Could not get IPersistStreamInit iface: %08x\n", hres);
+
+    IPersistStreamInit_Release(psi);
+
     ref = IOleObject_Release(oleobj);
     ok(!ref, "ref = %d\n", ref);
 }




More information about the wine-cvs mailing list