Module: wine Branch: master Commit: 9645f9d19d2ff9a57546569f1a573a5b73801437 URL: http://source.winehq.org/git/wine.git/?a=commit;h=9645f9d19d2ff9a57546569f1a...
Author: Rob Shearman rob@codeweavers.com Date: Sun Jan 6 16:20:26 2008 +0000
ole32: get_moniker_for_progid_display_name should fallback to using IClassFactory to get IParseDisplayName if getting it directly fails.
---
dlls/ole32/moniker.c | 15 +++++++++++++++ 1 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/dlls/ole32/moniker.c b/dlls/ole32/moniker.c index e77c8c4..cc83d95 100644 --- a/dlls/ole32/moniker.c +++ b/dlls/ole32/moniker.c @@ -1086,6 +1086,21 @@ static HRESULT get_moniker_for_progid_display_name(LPBC pbc, IParseDisplayName *pdn; hr = IMoniker_BindToObject(class_moniker, pbc, NULL, &IID_IParseDisplayName, (void **)&pdn); + /* fallback to using IClassFactory to get IParseDisplayName - + * adsldp.dll depends on this */ + if (FAILED(hr)) + { + IClassFactory *pcf; + hr = IMoniker_BindToObject(class_moniker, pbc, NULL, + &IID_IClassFactory, (void **)&pcf); + if (SUCCEEDED(hr)) + { + hr = IClassFactory_CreateInstance(pcf, NULL, + &IID_IParseDisplayName, + (void **)&pdn); + IClassFactory_Release(pcf); + } + } IMoniker_Release(class_moniker); if (SUCCEEDED(hr)) {