Upward traversal of inherency tree didn't occur for dispinterfaces.
Index: dlls/oleaut32/typelib.c =================================================================== RCS file: /home/wine/wine/dlls/oleaut32/typelib.c,v retrieving revision 1.106 diff -u -b -r1.106 typelib.c --- dlls/oleaut32/typelib.c 25 Nov 2003 01:49:48 -0000 1.106 +++ dlls/oleaut32/typelib.c 9 Dec 2003 18:14:58 -0000 @@ -4017,8 +4017,8 @@ } else { - if(This->TypeAttr.typekind==TKIND_INTERFACE && This->TypeAttr.cImplTypes ) - { + if(This->TypeAttr.cImplTypes && + (This->TypeAttr.typekind==TKIND_INTERFACE || This->TypeAttr.typekind==TKIND_DISPATCH)) { /* recursive search */ ITypeInfo *pTInfo; HRESULT result; @@ -4162,8 +4162,8 @@ } } /* not found, see if this is and interface with an inheritance */ - if(This->TypeAttr.typekind==TKIND_INTERFACE && - This->TypeAttr.cImplTypes ){ + if(This->TypeAttr.cImplTypes && + (This->TypeAttr.typekind==TKIND_INTERFACE || This->TypeAttr.typekind==TKIND_DISPATCH)) { /* recursive search */ ITypeInfo *pTInfo; ret=ITypeInfo_GetRefTypeInfo(iface, @@ -4613,7 +4613,8 @@ } } /* not found, look for it in inherited interfaces */ - if (This->TypeAttr.typekind==TKIND_INTERFACE && This->TypeAttr.cImplTypes) { + if (This->TypeAttr.cImplTypes && + (This->TypeAttr.typekind==TKIND_INTERFACE || This->TypeAttr.typekind==TKIND_DISPATCH)) { /* recursive search */ ITypeInfo *pTInfo; HRESULT hr; @@ -5511,7 +5512,8 @@ } } /* not found, look for it in inherited interfaces */ - if ((This->TypeAttr.typekind == TKIND_INTERFACE) && This->TypeAttr.cImplTypes) { + if (This->TypeAttr.cImplTypes && + (This->TypeAttr.typekind == TKIND_INTERFACE || This->TypeAttr.typekind == TKIND_DISPATCH)) { /* recursive search */ ITypeInfo *pTInfo; ITypeComp *pTComp;