Jacek Caban : atl100: Added AtlUnadvise implementation.

Alexandre Julliard julliard at winehq.org
Thu Jan 3 13:31:13 CST 2013


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Jan  3 11:45:54 2013 +0100

atl100: Added AtlUnadvise implementation.

---

 dlls/atl100/atl.c       |   20 ++++++++++++++++++--
 dlls/atl100/tests/atl.c |   13 +++++++++++--
 2 files changed, 29 insertions(+), 4 deletions(-)

diff --git a/dlls/atl100/atl.c b/dlls/atl100/atl.c
index 00d62de..4e2ba9f 100644
--- a/dlls/atl100/atl.c
+++ b/dlls/atl100/atl.c
@@ -68,8 +68,24 @@ HRESULT WINAPI AtlAdvise(IUnknown *pUnkCP, IUnknown *pUnk, const IID *iid, DWORD
  */
 HRESULT WINAPI AtlUnadvise(IUnknown *pUnkCP, const IID *iid, DWORD dw)
 {
-    FIXME("%p %p %d\n", pUnkCP, iid, dw);
-    return S_OK;
+    IConnectionPointContainer *container;
+    IConnectionPoint *cp;
+    HRESULT hres;
+
+    TRACE("%p %p %d\n", pUnkCP, iid, dw);
+
+    hres = IUnknown_QueryInterface(pUnkCP, &IID_IConnectionPointContainer, (void**)&container);
+    if(FAILED(hres))
+        return hres;
+
+    hres = IConnectionPointContainer_FindConnectionPoint(container, iid, &cp);
+    IConnectionPointContainer_Release(container);
+    if(FAILED(hres))
+        return hres;
+
+    hres = IConnectionPoint_Unadvise(cp, dw);
+    IConnectionPoint_Release(cp);
+    return hres;
 }
 
 /***********************************************************************
diff --git a/dlls/atl100/tests/atl.c b/dlls/atl100/tests/atl.c
index 8b5edae..963b39e 100644
--- a/dlls/atl100/tests/atl.c
+++ b/dlls/atl100/tests/atl.c
@@ -242,18 +242,22 @@ static HRESULT WINAPI ConnectionPoint_GetConnectionPointContainer(IConnectionPoi
     return E_NOTIMPL;
 }
 
+static int advise_cnt;
+
 static HRESULT WINAPI ConnectionPoint_Advise(IConnectionPoint *iface, IUnknown *pUnkSink,
                                              DWORD *pdwCookie)
 {
     ok(pUnkSink == (IUnknown*)0xdead0000, "pUnkSink = %p\n", pUnkSink);
     *pdwCookie = 0xdeadbeef;
+    advise_cnt++;
     return S_OK;
 }
 
 static HRESULT WINAPI ConnectionPoint_Unadvise(IConnectionPoint *iface, DWORD dwCookie)
 {
-    ok(0, "unexpected call\n");
-    return E_NOTIMPL;
+    ok(dwCookie == 0xdeadbeef, "dwCookie = %x\n", dwCookie);
+    advise_cnt--;
+    return S_OK;
 }
 
 static HRESULT WINAPI ConnectionPoint_EnumConnections(IConnectionPoint *iface,
@@ -332,6 +336,11 @@ static void test_cp(void)
     hres = AtlAdvise((IUnknown*)&ConnectionPointContainer, (IUnknown*)0xdead0000, &CLSID_Test, &cookie);
     ok(hres == S_OK, "AtlAdvise failed: %08x\n", hres);
     ok(cookie == 0xdeadbeef, "cookie = %x\n", cookie);
+    ok(advise_cnt == 1, "advise_cnt = %d\n", advise_cnt);
+
+    hres = AtlUnadvise((IUnknown*)&ConnectionPointContainer, &CLSID_Test, 0xdeadbeef);
+    ok(hres == S_OK, "AtlUnadvise failed: %08x\n", hres);
+    ok(!advise_cnt, "advise_cnt = %d\n", advise_cnt);
 }
 
 START_TEST(atl)




More information about the wine-cvs mailing list