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