Aaro Altonen : msado15: Implement IConnectionPointContainer_FindConnectionPoint.

Alexandre Julliard julliard at winehq.org
Tue Nov 10 13:46:21 CST 2020


Module: wine
Branch: stable
Commit: c5cb0eea37d3dd28183060fdad1fef71d8cbc15c
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=c5cb0eea37d3dd28183060fdad1fef71d8cbc15c

Author: Aaro Altonen <a.altonen at hotmail.com>
Date:   Mon Jun  1 14:42:18 2020 +0300

msado15: Implement IConnectionPointContainer_FindConnectionPoint.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=49303
Signed-off-by: Aaro Altonen <a.altonen at hotmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit a1222a3595c8eafaef7df95b3804fa2205ac3c84)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>

---

 dlls/msado15/connection.c    | 17 +++++++++++++++--
 dlls/msado15/tests/msado15.c | 27 +++++++++++++++++++++++++++
 2 files changed, 42 insertions(+), 2 deletions(-)

diff --git a/dlls/msado15/connection.c b/dlls/msado15/connection.c
index be201cb90b3..9e8c05522ef 100644
--- a/dlls/msado15/connection.c
+++ b/dlls/msado15/connection.c
@@ -23,6 +23,7 @@
 #include "initguid.h"
 #include "ocidl.h"
 #include "objbase.h"
+#include "olectl.h"
 #include "msado15_backcompat.h"
 
 #include "wine/debug.h"
@@ -455,8 +456,20 @@ static HRESULT WINAPI connpointcontainer_FindConnectionPoint( IConnectionPointCo
         REFIID riid, IConnectionPoint **point )
 {
     struct connection *connection = impl_from_IConnectionPointContainer( iface );
-    FIXME( "%p, %s, %p\n", connection, debugstr_guid( riid ), point );
-    return E_NOTIMPL;
+
+    TRACE( "%p, %s %p\n", connection, debugstr_guid( riid ), point );
+
+    if (!point) return E_POINTER;
+
+    if (IsEqualIID( riid, connection->cp_connev.riid ))
+    {
+        *point = &connection->cp_connev.IConnectionPoint_iface;
+        IConnectionPoint_AddRef( *point );
+        return S_OK;
+    }
+
+    FIXME( "unsupported connection point %s\n", debugstr_guid( riid ) );
+    return CONNECT_E_NOCONNECTION;
 }
 
 static const struct IConnectionPointContainerVtbl connpointcontainer_vtbl =
diff --git a/dlls/msado15/tests/msado15.c b/dlls/msado15/tests/msado15.c
index cd6516d45d6..9cde03dd07a 100644
--- a/dlls/msado15/tests/msado15.c
+++ b/dlls/msado15/tests/msado15.c
@@ -20,6 +20,7 @@
 #define COBJMACROS
 #include <initguid.h>
 #include <oledb.h>
+#include <olectl.h>
 #include <msado15_backcompat.h>
 #include "wine/test.h"
 
@@ -799,10 +800,36 @@ static void test_Command(void)
     _Command_Release( command );
 }
 
+static void test_ConnectionPoint(void)
+{
+    HRESULT hr;
+    ULONG refs;
+    IConnectionPoint *point;
+    IConnectionPointContainer *pointcontainer;
+
+    hr = CoCreateInstance( &CLSID_Connection, NULL, CLSCTX_INPROC_SERVER,
+            &IID_IConnectionPointContainer, (void**)&pointcontainer );
+
+    hr = IConnectionPointContainer_FindConnectionPoint( pointcontainer, &DIID_ConnectionEvents, NULL );
+    ok( hr == E_POINTER, "got %08x\n", hr );
+
+    hr = IConnectionPointContainer_FindConnectionPoint( pointcontainer, &DIID_RecordsetEvents, &point );
+    ok( hr == CONNECT_E_NOCONNECTION, "got %08x\n", hr );
+
+    hr = IConnectionPointContainer_FindConnectionPoint( pointcontainer, &DIID_ConnectionEvents, &point );
+    ok( hr == S_OK, "got %08x\n", hr );
+
+    refs = IConnectionPoint_Release( point );
+    ok( refs == 1, "got %u", refs );
+
+    IConnectionPointContainer_Release( pointcontainer );
+}
+
 START_TEST(msado15)
 {
     CoInitialize( NULL );
     test_Connection();
+    test_ConnectionPoint();
     test_Fields();
     test_Recordset();
     test_Stream();




More information about the wine-cvs mailing list