Robert Shearman wrote:
Alex Villacís Lasso wrote:
--- wine-20050830-cvs/dlls/oleaut32/typelib.c 2005-09-21 10:39:22.000000000 -0500 +++ wine-20050830-cvs-patch/dlls/oleaut32/typelib.c 2005-09-24 20:34:32.000000000 -0500 @@ -5207,9 +5207,11 @@ ITypeInfoImpl *This = (ITypeInfoImpl *)iface; HRESULT result = E_FAIL;
- if (hRefType == -1 &&
- if ((hRefType == -1 && (((ITypeInfoImpl*) This)->TypeAttr.typekind ==
TKIND_DISPATCH) &&
(((ITypeInfoImpl*) This)->TypeAttr.wTypeFlags &
TYPEFLAG_FDUAL))
(((ITypeInfoImpl*) This)->TypeAttr.wTypeFlags &
TYPEFLAG_FDUAL)) ||
((((ITypeInfoImpl*) This)->TypeAttr.typekind ==
TKIND_DISPATCH) &&
(((ITypeInfoImpl*) This)->TypeAttr.wTypeFlags &
TYPEFLAG_FDISPATCHABLE))) { /* when we meet a DUAL dispinterface, we must create the interface * version of it.
This patch executes the "create interface" code when typekind == TKIND_DISPATCH and wTypeFlags has TYPEFLAG_FDISPATCHABLE, regardless of the value of hRefType, in addition to the previous condition. With this patch, the native oleaut32 requirement is removed. The typelib test still passes - not that it actually tests the change in code (more on this later).
This patch looks pretty good, but I can't see the difference between TKIND_DISPATCH and TYPEFLAG_FDISPATCHABLE on MSDN. They look like they mean the same thing. Have you seen a typelib with one and not the other? Also, you can remove all of the casts of This while you're changing that if statement because they are unnecessary.
I need to read the Automation guide throughly. Back when I was trying to make this app work, the telltale sign was the "Can't find pRefType for ref XXX" right before the crash. Since I was at my home machine, and I don't have an Internet connection at home, I could not check whether TKIND_DISPATCH and TYPEFLAG_FDISPATCHABLE mean the same thing or should be specified together. I can send the (reverse-engineered with OLEVIEW) typelib for DBGRID32.OCX, if that might show something.
I already sent the other two patches to wine-patches. I hope they get commited.
Alex Villacís Lasso