{
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);
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) &&
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(
return S_OK;
}
*pImplTypeFlags=0;
+
+ if(This->TypeAttr.typekind==TKIND_DISPATCH && !index)
+ return S_OK;
+
+ WARN("ImplType %d not found\n", index);
return TYPE_E_ELEMENTNOTFOUND;
}
hres = DISP_E_PARAMNOTFOUND;
goto func_fail;
}
- /* ignore the DISPID_PROPERTYPUT named argument from now on */
- cNamedArgs--;
- rgdispidNamedArgs++;
}
if (func_desc->cParamsOpt < 0 && cNamedArgs)
USHORT j;
src_arg = NULL;
for (j = 0; j < cNamedArgs; j++)
- if (rgdispidNamedArgs[j] == i)
+ if (rgdispidNamedArgs[j] == i || (i == func_desc->cParams-1 && rgdispidNamedArgs[j] == DISPID_PROPERTYPUT))
{
src_arg = &pDispParams->rgvarg[j];
break;
BSTR *pBstrMops)
{
ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
- FIXME("(%p) stub!\n", This);
+ FIXME("(%p %d) stub!\n", This, memid);
+ *pBstrMops = NULL;
return S_OK;
}