Upwards traversal of inheritance tree didn't occur for dispatch
interfaces.
diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c
index 77333c5..c2da7fa 100644
--- a/dlls/oleaut32/typelib.c
+++ b/dlls/oleaut32/typelib.c
@@ -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;