Vincent Povirk : oleaut32: Return type mismatch errors in ITypeLibComp_fnBind.

Alexandre Julliard julliard at winehq.org
Mon Mar 15 12:19:41 CDT 2010


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

Author: Vincent Povirk <vincent at codeweavers.com>
Date:   Fri Mar 12 14:54:46 2010 -0600

oleaut32: Return type mismatch errors in ITypeLibComp_fnBind.

---

 dlls/oleaut32/tests/typelib.c |    2 +-
 dlls/oleaut32/typelib.c       |   17 +++++++++++++++--
 2 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/dlls/oleaut32/tests/typelib.c b/dlls/oleaut32/tests/typelib.c
index 5f4d997..452ab7d 100644
--- a/dlls/oleaut32/tests/typelib.c
+++ b/dlls/oleaut32/tests/typelib.c
@@ -150,7 +150,7 @@ static void test_TypeComp(void)
     /* test getting a function within a TKIND_MODULE with INVOKE_PROPERTYGET */
     ulHash = LHashValOfNameSys(SYS_WIN32, LOCALE_NEUTRAL, wszSavePicture);
     hr = ITypeComp_Bind(pTypeComp, wszSavePicture, ulHash, INVOKE_PROPERTYGET, &pTypeInfo, &desckind, &bindptr);
-    todo_wine ok(hr == TYPE_E_TYPEMISMATCH,
+    ok(hr == TYPE_E_TYPEMISMATCH,
         "ITypeComp_Bind should have failed with TYPE_E_TYPEMISMATCH instead of 0x%08x\n",
         hr);
 
diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c
index 445eac5..87aba81 100644
--- a/dlls/oleaut32/typelib.c
+++ b/dlls/oleaut32/typelib.c
@@ -4722,6 +4722,7 @@ static HRESULT WINAPI ITypeLibComp_fnBind(
 {
     ITypeLibImpl *This = impl_from_ITypeComp(iface);
     ITypeInfoImpl *pTypeInfo;
+    int typemismatch=0;
 
     TRACE("(%s, 0x%x, 0x%x, %p, %p, %p)\n", debugstr_w(szName), lHash, wFlags, ppTInfo, pDescKind, pBindPtr);
 
@@ -4761,6 +4762,8 @@ static HRESULT WINAPI ITypeLibComp_fnBind(
                 TRACE("found in module or in enum: %s\n", debugstr_w(szName));
                 return S_OK;
             }
+            else if (hr == TYPE_E_TYPEMISMATCH)
+                typemismatch = 1;
         }
 
         if ((pTypeInfo->TypeAttr.typekind == TKIND_COCLASS) &&
@@ -4833,11 +4836,21 @@ static HRESULT WINAPI ITypeLibComp_fnBind(
                 ITypeInfo_AddRef(*ppTInfo);
                 return S_OK;
             }
+            else if (hr == TYPE_E_TYPEMISMATCH)
+                typemismatch = 1;
         }
     }
 
-    TRACE("name not found %s\n", debugstr_w(szName));
-    return S_OK;
+    if (typemismatch)
+    {
+        TRACE("type mismatch %s\n", debugstr_w(szName));
+        return TYPE_E_TYPEMISMATCH;
+    }
+    else
+    {
+        TRACE("name not found %s\n", debugstr_w(szName));
+        return S_OK;
+    }
 }
 
 static HRESULT WINAPI ITypeLibComp_fnBindType(




More information about the wine-cvs mailing list