Nikolay Sivov : msscript: Added IConnectionPointContainer stub.

Alexandre Julliard julliard at winehq.org
Thu Jun 16 10:20:56 CDT 2016


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Thu Jun 16 12:17:11 2016 +0300

msscript: Added IConnectionPointContainer 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       | 54 ++++++++++++++++++++++++++++++++++++++
 dlls/msscript.ocx/tests/msscript.c | 29 ++++++++++++++++++++
 2 files changed, 83 insertions(+)

diff --git a/dlls/msscript.ocx/msscript.c b/dlls/msscript.ocx/msscript.c
index 5a03f0c..6465104 100644
--- a/dlls/msscript.ocx/msscript.c
+++ b/dlls/msscript.ocx/msscript.c
@@ -34,6 +34,7 @@ struct ScriptControl {
     IPersistStreamInit IPersistStreamInit_iface;
     IOleObject IOleObject_iface;
     IOleControl IOleControl_iface;
+    IConnectionPointContainer IConnectionPointContainer_iface;
     LONG ref;
     IOleClientSite *site;
     SIZEL extent;
@@ -140,6 +141,11 @@ static inline ScriptControl *impl_from_IOleControl(IOleControl *iface)
     return CONTAINING_RECORD(iface, ScriptControl, IOleControl_iface);
 }
 
+static inline ScriptControl *impl_from_IConnectionPointContainer(IConnectionPointContainer *iface)
+{
+    return CONTAINING_RECORD(iface, ScriptControl, IConnectionPointContainer_iface);
+}
+
 static HRESULT WINAPI ScriptControl_QueryInterface(IScriptControl *iface, REFIID riid, void **ppv)
 {
     ScriptControl *This = impl_from_IScriptControl(iface);
@@ -165,6 +171,9 @@ static HRESULT WINAPI ScriptControl_QueryInterface(IScriptControl *iface, REFIID
     }else if(IsEqualGUID(&IID_IOleControl, riid)) {
         TRACE("(%p)->(IID_IOleControl %p)\n", This, ppv);
         *ppv = &This->IOleControl_iface;
+    }else if(IsEqualGUID(&IID_IConnectionPointContainer, riid)) {
+        TRACE("(%p)->(IID_IConnectionPointContainer %p)\n", This, ppv);
+        *ppv = &This->IConnectionPointContainer_iface;
     }else {
         FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
         *ppv = NULL;
@@ -856,6 +865,50 @@ static const IOleControlVtbl OleControlVtbl = {
     OleControl_FreezeEvents
 };
 
+static HRESULT WINAPI ConnectionPointContainer_QueryInterface(IConnectionPointContainer *iface, REFIID riid, void **obj)
+{
+    ScriptControl *This = impl_from_IConnectionPointContainer(iface);
+    return IScriptControl_QueryInterface(&This->IScriptControl_iface, riid, obj);
+}
+
+static ULONG WINAPI ConnectionPointContainer_AddRef(IConnectionPointContainer *iface)
+{
+    ScriptControl *This = impl_from_IConnectionPointContainer(iface);
+    return IScriptControl_AddRef(&This->IScriptControl_iface);
+}
+
+static ULONG WINAPI ConnectionPointContainer_Release(IConnectionPointContainer *iface)
+{
+    ScriptControl *This = impl_from_IConnectionPointContainer(iface);
+    return IScriptControl_Release(&This->IScriptControl_iface);
+}
+
+static HRESULT WINAPI ConnectionPointContainer_EnumConnectionPoints(IConnectionPointContainer *iface, IEnumConnectionPoints **enum_points)
+{
+    ScriptControl *This = impl_from_IConnectionPointContainer(iface);
+
+    FIXME("(%p)->(%p)\n", This, enum_points);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ConnectionPointContainer_FindConnectionPoint(IConnectionPointContainer *iface, REFIID riid, IConnectionPoint **cp)
+{
+    ScriptControl *This = impl_from_IConnectionPointContainer(iface);
+
+    FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), cp);
+
+    return E_NOTIMPL;
+}
+
+static const IConnectionPointContainerVtbl ConnectionPointContainerVtbl = {
+    ConnectionPointContainer_QueryInterface,
+    ConnectionPointContainer_AddRef,
+    ConnectionPointContainer_Release,
+    ConnectionPointContainer_EnumConnectionPoints,
+    ConnectionPointContainer_FindConnectionPoint
+};
+
 static HRESULT WINAPI ScriptControl_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
 {
     ScriptControl *script_control;
@@ -873,6 +926,7 @@ static HRESULT WINAPI ScriptControl_CreateInstance(IClassFactory *iface, IUnknow
     script_control->IPersistStreamInit_iface.lpVtbl = &PersistStreamInitVtbl;
     script_control->IOleObject_iface.lpVtbl = &OleObjectVtbl;
     script_control->IOleControl_iface.lpVtbl = &OleControlVtbl;
+    script_control->IConnectionPointContainer_iface.lpVtbl = &ConnectionPointContainerVtbl;
     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 9c9a483..be5fee2 100644
--- a/dlls/msscript.ocx/tests/msscript.c
+++ b/dlls/msscript.ocx/tests/msscript.c
@@ -93,6 +93,15 @@ DEFINE_EXPECT(InitNew);
 DEFINE_EXPECT(Close);
 DEFINE_EXPECT(SetScriptSite);
 
+#define EXPECT_REF(obj,ref) _expect_ref((IUnknown*)obj, ref, __LINE__)
+static void _expect_ref(IUnknown* obj, ULONG ref, int line)
+{
+    ULONG rc;
+    IUnknown_AddRef(obj);
+    rc = IUnknown_Release(obj);
+    ok_(__FILE__,line)(rc == ref, "expected refcount %d, got %d\n", ref, rc);
+}
+
 static IActiveScriptSite *site;
 static SCRIPTSTATE state;
 
@@ -769,7 +778,26 @@ if (hr == S_OK)
     }
     else
         skip("Could not register TestScript engine\n");
+}
+
+static void test_connectionpoints(void)
+{
+    IConnectionPointContainer *container;
+    IScriptControl *sc;
+    HRESULT hr;
 
+    hr = CoCreateInstance(&CLSID_ScriptControl, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
+            &IID_IScriptControl, (void**)&sc);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+
+    EXPECT_REF(sc, 1);
+    hr = IScriptControl_QueryInterface(sc, &IID_IConnectionPointContainer, (void**)&container);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    EXPECT_REF(sc, 2);
+    EXPECT_REF(container, 2);
+
+    IConnectionPointContainer_Release(container);
+    IScriptControl_Release(sc);
 }
 
 START_TEST(msscript)
@@ -791,6 +819,7 @@ START_TEST(msscript)
     test_persiststreaminit();
     test_olecontrol();
     test_Language();
+    test_connectionpoints();
 
     CoUninitialize();
 }




More information about the wine-cvs mailing list