typelib patch 4

Ove Kaaven ovek at arcticnet.no
Wed Oct 3 17:32:07 CDT 2001


Log:
Ove Kaaven <ovek at transgaming.com>
ITypeInfo::Invoke should also search inherited interfaces for the method
to invoke.

Index: dlls/oleaut32/typelib.c
===================================================================
RCS file: /home/wine/wine/dlls/oleaut32/typelib.c,v
retrieving revision 1.50
diff -u -r1.50 typelib.c
--- dlls/oleaut32/typelib.c	2001/10/03 18:42:54	1.50
+++ dlls/oleaut32/typelib.c	2001/10/03 20:59:42
@@ -4018,16 +4020,28 @@
 	   return E_FAIL;
 	}
     } else {
-	FIXME("variable based invoking not supported yet.\n");
 	for(pVDesc=This->varlist; pVDesc; pVDesc=pVDesc->next) {
 	    if (pVDesc->vardesc.memid == memid) {
-		FIXME("varseek: Found memid name %s\n",debugstr_w(((LPWSTR)pVDesc->Name)));
+		FIXME("varseek: Found memid name %s, but variable-based invoking not supported\n",debugstr_w(((LPWSTR)pVDesc->Name)));
 		dump_TLBVarDesc(pVDesc);
 		break;
 	    }
 	}
+    }
+    /* not found, look for it in inherited interfaces */
+    if (This->TypeAttr.typekind==TKIND_INTERFACE && This->TypeAttr.cImplTypes) {
+        /* recursive search */
+        ITypeInfo *pTInfo;
+        HRESULT hr;
+        hr=ITypeInfo_GetRefTypeInfo(iface, This->impltypelist->hRef, &pTInfo);
+        if(SUCCEEDED(hr)){
+            hr=ITypeInfo_Invoke(pTInfo,pIUnk,memid,dwFlags,pDispParams,pVarResult,pExcepInfo,pArgErr);
+            ITypeInfo_Release(pTInfo);
+            return hr;
+        }
+        WARN("Could not search inherited interface!\n");
     }
-    FIXME("Did not find member id %d!\n",(int)memid);
+    ERR("did not find member id %d, flags %d!\n", (int)memid, dwFlags);
     return DISP_E_MEMBERNOTFOUND;
 }
 





More information about the wine-patches mailing list