Rob Shearman : ole32: get_moniker_for_progid_display_name should fallback to using IClassFactory to get IParseDisplayName if getting it directly fails .

Alexandre Julliard julliard at winehq.org
Mon Jan 7 08:39:22 CST 2008


Module: wine
Branch: master
Commit: 9645f9d19d2ff9a57546569f1a573a5b73801437
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=9645f9d19d2ff9a57546569f1a573a5b73801437

Author: Rob Shearman <rob at 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))
         {




More information about the wine-cvs mailing list