PATCH: typelib

Marcus Meissner marcus at jet.franken.de
Thu May 15 13:15:41 CDT 2003


Hi,

Changelog:
	Handle VT_I2 <-> VT_USERDEFINED/TKIND_ENUM conversions too.

Index: dlls/oleaut32/typelib.c
===================================================================
RCS file: /home/wine/wine/dlls/oleaut32/typelib.c,v
retrieving revision 1.95
diff -u -r1.95 typelib.c
--- dlls/oleaut32/typelib.c	13 May 2003 22:15:26 -0000	1.95
+++ dlls/oleaut32/typelib.c	15 May 2003 18:15:11 -0000
@@ -4232,12 +4232,18 @@
 	ITypeInfo_GetTypeAttr(tinfo2,&tattr);
 	switch (tattr->typekind) {
 	case TKIND_ENUM:
-	    if (V_VT(arg) == VT_I4) {
-		memcpy(argpos, &V_UNION(arg,iVal), 4);
-		return S_OK;
-	    }
-	    FIXME("vt 0x%x -> TKIND_ENUM unhandled.\n",V_VT(arg));
-	    break;
+          switch ( V_VT( arg ) ) {
+          case VT_I2:
+             *argpos = V_UNION(arg,iVal);
+             return S_OK;
+          case VT_I4:
+             memcpy(argpos, &V_UNION(arg,lVal), 4);
+             return S_OK;
+          default:
+             FIXME("vt 0x%x -> TKIND_ENUM unhandled.\n",V_VT(arg));
+             break;
+          }
+
 	case TKIND_ALIAS:
 	    tdesc = &(tattr->tdescAlias);
 	    hres = _copy_arg((ITypeInfo2*)tinfo2, tdesc, argpos, arg, tdesc->vt);
@@ -4432,6 +4438,9 @@
 		for (i=0;i<pFDesc->funcdesc.cParams-pDispParams->cArgs;i++) {
 		    int arglen = _argsize(pFDesc->funcdesc.lprgelemdescParam[i].tdesc.vt);
 		    TYPEDESC *tdesc = &(pFDesc->funcdesc.lprgelemdescParam[i+pDispParams->cArgs].tdesc);
+                   TYPEDESC i4_tdesc;
+                   i4_tdesc.vt = VT_I4;
+
 		    /* If we are a pointer to a variant, we are done already */
 		    if ((tdesc->vt==VT_PTR)&&(tdesc->u.lptdesc->vt==VT_VARIANT))
 			continue;
@@ -4453,7 +4462,8 @@
 			ITypeInfo_GetTypeAttr(tinfo2,&tattr);
 			switch (tattr->typekind) {
 			case TKIND_ENUM:
-			    FIXME("TKIND_ENUM unhandled.\n");
+                           /* force the return type to be VT_I4 */
+                           tdesc = &i4_tdesc;
 			    break;
 			case TKIND_ALIAS:
 			    TRACE("TKIND_ALIAS to vt 0x%x\n",tattr->tdescAlias.vt);



More information about the wine-patches mailing list