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