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