[PATCH 4/5] hlink: Return correct requested interface from HlinkCreateFromMoniker().
Nikolay Sivov
nsivov at codeweavers.com
Mon Apr 11 03:40:32 CDT 2022
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
dlls/hlink/hlink_main.c | 15 +++++++--------
dlls/hlink/tests/hlink.c | 17 +++++++++++++++++
2 files changed, 24 insertions(+), 8 deletions(-)
diff --git a/dlls/hlink/hlink_main.c b/dlls/hlink/hlink_main.c
index e70a066bb05..3f7a3fcd62e 100644
--- a/dlls/hlink/hlink_main.c
+++ b/dlls/hlink/hlink_main.c
@@ -49,15 +49,15 @@ HRESULT WINAPI HlinkCreateFromMoniker( IMoniker *pimkTrgt, LPCWSTR pwzLocation,
IUnknown* piunkOuter, REFIID riid, void** ppvObj)
{
IHlink *hl = NULL;
- HRESULT r;
+ HRESULT hr;
TRACE("%p %s %s %p %li %p %s %p\n", pimkTrgt, debugstr_w(pwzLocation),
debugstr_w(pwzFriendlyName), pihlsite, dwSiteData, piunkOuter,
debugstr_guid(riid), ppvObj);
- r = CoCreateInstance(&CLSID_StdHlink, piunkOuter, CLSCTX_INPROC_SERVER, riid, (LPVOID*)&hl);
- if (FAILED(r))
- return r;
+ hr = CoCreateInstance(&CLSID_StdHlink, piunkOuter, CLSCTX_INPROC_SERVER, &IID_IHlink, (LPVOID*)&hl);
+ if (FAILED(hr))
+ return hr;
IHlink_SetMonikerReference(hl, HLINKSETF_LOCATION | HLINKSETF_TARGET, pimkTrgt, pwzLocation);
@@ -66,11 +66,10 @@ HRESULT WINAPI HlinkCreateFromMoniker( IMoniker *pimkTrgt, LPCWSTR pwzLocation,
if (pihlsite)
IHlink_SetHlinkSite(hl, pihlsite, dwSiteData);
- *ppvObj = hl;
-
- TRACE("Returning %lx\n",r);
+ hr = IHlink_QueryInterface(hl, riid, ppvObj);
+ IHlink_Release(hl);
- return r;
+ return hr;
}
/***********************************************************************
diff --git a/dlls/hlink/tests/hlink.c b/dlls/hlink/tests/hlink.c
index 984f952c158..c5c8cd9c81b 100644
--- a/dlls/hlink/tests/hlink.c
+++ b/dlls/hlink/tests/hlink.c
@@ -2607,6 +2607,22 @@ static void test_HlinkUpdateStackItem(void)
CHECK_CALLED(HLF_UpdateHlink);
}
+static void test_HlinkCreateFromMoniker(void)
+{
+ IPersistStream *stream;
+ IMoniker *moniker;
+ HRESULT hr;
+
+ hr = CreateItemMoniker(L"1", L"1", &moniker);
+ ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
+
+ hr = HlinkCreateFromMoniker(moniker, L"1", L"a", NULL, 0, NULL, &IID_IPersistStream, (void **)&stream);
+ ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
+ IPersistStream_Release(stream);
+
+ IMoniker_Release(moniker);
+}
+
START_TEST(hlink)
{
CoInitialize(NULL);
@@ -2627,6 +2643,7 @@ START_TEST(hlink)
test_StdHlink();
test_Hlink_Navigate();
test_HlinkUpdateStackItem();
+ test_HlinkCreateFromMoniker();
CoUninitialize();
}
--
2.35.1
More information about the wine-devel
mailing list