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



Reply via email to