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