Module: wine Branch: master Commit: 9d6cf488b60e0ce55a46c1560af6bff8be4dc849 URL: http://source.winehq.org/git/wine.git/?a=commit;h=9d6cf488b60e0ce55a46c1560a...
Author: Jacek Caban jacek@codeweavers.com Date: Tue Jan 29 00:22:12 2008 +0100
hlink: Added HlinkResolveMonikerForData implementation.
---
dlls/hlink/hlink.spec | 2 +- dlls/hlink/hlink_main.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletions(-)
diff --git a/dlls/hlink/hlink.spec b/dlls/hlink/hlink.spec index 117327b..0cc761f 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 b9ce4af..ed8d60f 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) {