Nikolay Sivov : msscript: Added IOleControl stub.

Alexandre Julliard julliard at winehq.org
Fri Jun 10 09:05:46 CDT 2016


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Thu Jun  9 20:40:14 2016 +0300

msscript: Added IOleControl stub.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/msscript.ocx/msscript.c       | 80 ++++++++++++++++++++++++++++++++++++--
 dlls/msscript.ocx/tests/msscript.c | 13 +++++++
 2 files changed, 90 insertions(+), 3 deletions(-)

diff --git a/dlls/msscript.ocx/msscript.c b/dlls/msscript.ocx/msscript.c
index a586c50..b2f4e77 100644
--- a/dlls/msscript.ocx/msscript.c
+++ b/dlls/msscript.ocx/msscript.c
@@ -33,6 +33,7 @@ struct ScriptControl {
     IScriptControl IScriptControl_iface;
     IPersistStreamInit IPersistStreamInit_iface;
     IOleObject IOleObject_iface;
+    IOleControl IOleControl_iface;
     LONG ref;
     IOleClientSite *site;
     SIZEL extent;
@@ -134,6 +135,11 @@ static inline ScriptControl *impl_from_IPersistStreamInit(IPersistStreamInit *if
     return CONTAINING_RECORD(iface, ScriptControl, IPersistStreamInit_iface);
 }
 
+static inline ScriptControl *impl_from_IOleControl(IOleControl *iface)
+{
+    return CONTAINING_RECORD(iface, ScriptControl, IOleControl_iface);
+}
+
 static HRESULT WINAPI ScriptControl_QueryInterface(IScriptControl *iface, REFIID riid, void **ppv)
 {
     ScriptControl *This = impl_from_IScriptControl(iface);
@@ -148,14 +154,17 @@ static HRESULT WINAPI ScriptControl_QueryInterface(IScriptControl *iface, REFIID
         TRACE("(%p)->(IID_IScriptControl %p)\n", This, ppv);
         *ppv = &This->IScriptControl_iface;
     }else if(IsEqualGUID(&IID_IOleObject, riid)) {
-        TRACE("(%p)->(IID_IOleObject %p\n", This, ppv);
+        TRACE("(%p)->(IID_IOleObject %p)\n", This, ppv);
         *ppv = &This->IOleObject_iface;
     }else if(IsEqualGUID(&IID_IPersistStreamInit, riid)) {
-        TRACE("(%p)->(IID_IPersistStreamInit %p\n", This, ppv);
+        TRACE("(%p)->(IID_IPersistStreamInit %p)\n", This, ppv);
         *ppv = &This->IPersistStreamInit_iface;
     }else if(IsEqualGUID(&IID_IPersist, riid)) {
-        TRACE("(%p)->(IID_IPersist %p\n", This, ppv);
+        TRACE("(%p)->(IID_IPersist %p)\n", This, ppv);
         *ppv = &This->IPersistStreamInit_iface;
+    }else if(IsEqualGUID(&IID_IOleControl, riid)) {
+        TRACE("(%p)->(IID_IOleControl %p)\n", This, ppv);
+        *ppv = &This->IOleControl_iface;
     }else {
         FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
         *ppv = NULL;
@@ -777,6 +786,70 @@ static const IPersistStreamInitVtbl PersistStreamInitVtbl = {
     PersistStreamInit_InitNew
 };
 
+static HRESULT WINAPI OleControl_QueryInterface(IOleControl *iface, REFIID riid, void **obj)
+{
+    ScriptControl *This = impl_from_IOleControl(iface);
+    return IScriptControl_QueryInterface(&This->IScriptControl_iface, riid, obj);
+}
+
+static ULONG WINAPI OleControl_AddRef(IOleControl *iface)
+{
+    ScriptControl *This = impl_from_IOleControl(iface);
+    return IScriptControl_AddRef(&This->IScriptControl_iface);
+}
+
+static ULONG WINAPI OleControl_Release(IOleControl *iface)
+{
+    ScriptControl *This = impl_from_IOleControl(iface);
+    return IScriptControl_Release(&This->IScriptControl_iface);
+}
+
+static HRESULT WINAPI OleControl_GetControlInfo(IOleControl *iface, CONTROLINFO *info)
+{
+    ScriptControl *This = impl_from_IOleControl(iface);
+
+    FIXME("(%p)->(%p)\n", This, info);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI OleControl_OnMnemonic(IOleControl *iface, MSG *msg)
+{
+    ScriptControl *This = impl_from_IOleControl(iface);
+
+    FIXME("(%p)->(%p)\n", This, msg);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI OleControl_OnAmbientPropertyChange(IOleControl *iface, DISPID dispid)
+{
+    ScriptControl *This = impl_from_IOleControl(iface);
+
+    FIXME("(%p)->(%#x)\n", This, dispid);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI OleControl_FreezeEvents(IOleControl *iface, BOOL freeze)
+{
+    ScriptControl *This = impl_from_IOleControl(iface);
+
+    FIXME("(%p)->(%d)\n", This, freeze);
+
+    return E_NOTIMPL;
+}
+
+static const IOleControlVtbl OleControlVtbl = {
+    OleControl_QueryInterface,
+    OleControl_AddRef,
+    OleControl_Release,
+    OleControl_GetControlInfo,
+    OleControl_OnMnemonic,
+    OleControl_OnAmbientPropertyChange,
+    OleControl_FreezeEvents
+};
+
 static HRESULT WINAPI ScriptControl_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
 {
     ScriptControl *script_control;
@@ -793,6 +866,7 @@ static HRESULT WINAPI ScriptControl_CreateInstance(IClassFactory *iface, IUnknow
     script_control->IScriptControl_iface.lpVtbl = &ScriptControlVtbl;
     script_control->IPersistStreamInit_iface.lpVtbl = &PersistStreamInitVtbl;
     script_control->IOleObject_iface.lpVtbl = &OleObjectVtbl;
+    script_control->IOleControl_iface.lpVtbl = &OleControlVtbl;
     script_control->ref = 1;
     script_control->site = NULL;
 
diff --git a/dlls/msscript.ocx/tests/msscript.c b/dlls/msscript.ocx/tests/msscript.c
index 6dd7d67..f0245a6 100644
--- a/dlls/msscript.ocx/tests/msscript.c
+++ b/dlls/msscript.ocx/tests/msscript.c
@@ -178,6 +178,18 @@ static void test_persiststreaminit(void)
     IPersistStreamInit_Release(init);
 }
 
+static void test_olecontrol(void)
+{
+    IOleControl *olecontrol;
+    HRESULT hr;
+
+    hr = CoCreateInstance(&CLSID_ScriptControl, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
+            &IID_IOleControl, (void**)&olecontrol);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+
+    IOleControl_Release(olecontrol);
+}
+
 START_TEST(msscript)
 {
     IUnknown *unk;
@@ -195,6 +207,7 @@ START_TEST(msscript)
 
     test_oleobject();
     test_persiststreaminit();
+    test_olecontrol();
 
     CoUninitialize();
 }




More information about the wine-cvs mailing list