ITypeInfo_fnGetContainingTypeLib

Ove Kaaven ovek at arcticnet.no
Sun Nov 25 03:11:13 CST 2001


On Sat, 24 Nov 2001 lawson_whitney at juno.com wrote:

> Anyone like to take a swat at this?

I've explained it before on this list - you need to apply a typelib
refcounting patch, and there is one by Malte somewhere in the wine-patches
archives. But since you ask, here is the refcounting pieces of the patch
we use in WineX:

Index: typelib.c
===================================================================
RCS file: /cvsroot/winex/wine/dlls/oleaut32/typelib.c,v
retrieving revision 1.1.1.17
diff -u -r1.1.1.17 typelib.c
--- typelib.c	2001/10/28 14:14:58	1.1.1.17
+++ typelib.c	2001/11/25 09:05:56
@@ -1739,6 +1743,7 @@
         pcx->pTblDir->pTypeInfoTab.offset+count*sizeof(tiBase));
 /* this is where we are coming from */
     ptiRet->pTypeLib = pLibInfo;
+    ITypeLib2_AddRef((ITypeLib2 *)pLibInfo);
     ptiRet->index=count;
 /* fill in the typeattr fields */
     FIXME("Assign constructor/destructor memid\n");
@@ -2876,6 +2881,7 @@
       }
       *ppTypeInfoImpl = (ITypeInfoImpl*)ITypeInfo_Constructor();
       (*ppTypeInfoImpl)->pTypeLib = pTypeLibImpl;
+	  ITypeLib2_AddRef((ITypeLib2 *)pTypeLibImpl);
       (*ppTypeInfoImpl)->index = i;
       (*ppTypeInfoImpl)->Name = TLB_MultiByteToBSTR(
 					     pOtherTypeInfoBlks[i].name_offs +
@@ -4198,7 +4204,7 @@
 	if(!pRefType)
 	  FIXME("Can't find pRefType for ref %lx\n", hRefType);
 	if(pRefType && hRefType != -1) {
-            ITypeLib *pTLib;
+            ITypeLib *pTLib = NULL;
 
 	    if(pRefType->pImpTLInfo == TLB_REF_INTERNAL) {
 	        int Index;
@@ -4237,6 +4243,8 @@
 		    result = ITypeLib2_GetTypeInfo(pTLib, pRefType->index,
 						   ppTInfo);
 	    }
+	    if (pTLib != NULL)
+		ITypeLib2_Release(pTLib);
 	}
     }
 





More information about the wine-devel mailing list