From 9d6cf488b60e0ce55a46c1560af6bff8be4dc849 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Tue, 29 Jan 2008 00:22:12 +0100 Subject: [PATCH] hlink: Added HlinkResolveMonikerForData implementation. --- dlls/hlink/hlink.spec | 2 +- dlls/hlink/hlink_main.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/dlls/hlink/hlink.spec b/dlls/hlink/hlink.spec index 117327bbfbd..0cc761fbcb6 100644 --- a/dlls/hlink/hlink.spec +++ b/dlls/hlink/hlink.spec @@ -8,7 +8,7 @@ 10 stdcall HlinkNavigate(ptr ptr long ptr ptr ptr) 11 stdcall HlinkUpdateStackItem(ptr ptr long ptr wstr wstr) 12 stub HlinkOnRenameDocument -14 stub HlinkResolveMonikerForData +14 stdcall HlinkResolveMonikerForData(ptr long ptr long ptr ptr ptr) 15 stub HlinkResolveStringForData 16 stub OleSaveToStreamEx 18 stdcall HlinkParseDisplayName(ptr wstr long ptr ptr) diff --git a/dlls/hlink/hlink_main.c b/dlls/hlink/hlink_main.c index b9ce4af44ca..ed8d60f6ccb 100644 --- a/dlls/hlink/hlink_main.c +++ b/dlls/hlink/hlink_main.c @@ -347,6 +347,39 @@ HRESULT WINAPI HlinkParseDisplayName(LPBC pibc, LPCWSTR pwzDisplayName, BOOL fNo return hres; } +HRESULT WINAPI HlinkResolveMonikerForData(LPMONIKER pimkReference, DWORD reserved, LPBC pibc, + ULONG cFmtetc, FORMATETC *rgFmtetc, IBindStatusCallback *pibsc, LPMONIKER pimkBase) +{ + LPOLESTR name = NULL; + IBindCtx *bctx; + DWORD mksys = 0; + void *obj = NULL; + HRESULT hres; + + TRACE("(%p %x %p %d %p %p %p)\n", pimkReference, reserved, pibc, cFmtetc, rgFmtetc, pibsc, pimkBase); + + if(cFmtetc || rgFmtetc || pimkBase) + FIXME("Unsupported args\n"); + + hres = RegisterBindStatusCallback(pibc, pibsc, NULL /* FIXME */, 0); + if(FAILED(hres)) + return hres; + + hres = IMoniker_IsSystemMoniker(pimkReference, &mksys); + if(SUCCEEDED(hres) && mksys != MKSYS_URLMONIKER) + WARN("sysmk = %x\n", mksys); + + /* FIXME: What is it for? */ + CreateBindCtx(0, &bctx); + hres = IMoniker_GetDisplayName(pimkReference, bctx, NULL, &name); + IBindCtx_Release(bctx); + if(SUCCEEDED(hres)) { + TRACE("got display name %s\n", debugstr_w(name)); + CoTaskMemFree(name); + } + + return IMoniker_BindToStorage(pimkReference, pibc, NULL, &IID_IUnknown, &obj); +} static HRESULT WINAPI HLinkCF_fnQueryInterface ( LPCLASSFACTORY iface, REFIID riid, LPVOID *ppvObj) {