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