Improved ITypeInfo::Invoke

Alberto Massari alby at exln.com
Wed Nov 13 09:19:05 CST 2002


ChangeLog:
- ITypeInfo::Invoke now is able to invoke a function even when it is 
provided with a byref argument (e.g. a function expects a VT_BSTR, but the 
caller gives us a VT_BSTR|VT_BYREF; previously we were just emitting an 
error string in the console and calling the function with a VT_EMPTY argument)

This makes InstallShield installations that use the ComponentSetTarget API 
work as expected :-)

Alberto

-------------------------------
Alberto Massari
eXcelon Corp.
http://www.StylusStudio.com
-------------- next part --------------
Index: typelib.c
===================================================================
RCS file: /home/wine/wine/dlls/oleaut32/typelib.c,v
retrieving revision 1.80
diff -u -r1.80 typelib.c
--- typelib.c   11 Nov 2002 22:24:31 -0000      1.80
+++ typelib.c   13 Nov 2002 15:15:49 -0000
@@ -4300,14 +4300,14 @@
 
                    if (V_VT(arg) == tdesc->vt) {
                        memcpy(&args[argspos],&V_UNION(arg,lVal), arglen*sizeof(DWORD));
-                   } else {
-                       if (tdesc->vt == VT_VARIANT) {
-                           memcpy(&args[argspos],arg, arglen*sizeof(DWORD));
-                       } else {
-                           ERR("Set arg %d to disparg type %d vs %d\n",i,
-                                   V_VT(arg),tdesc->vt
-                           );
-                       }
+                   } else if(V_ISBYREF(arg) && ((V_VT(arg) & ~VT_BYREF)==tdesc->vt)) {
+                       memcpy(&args[argspos],(void*)V_UNION(arg,lVal), arglen*sizeof(DWORD));
+                    } else if (tdesc->vt == VT_VARIANT) {
+                       memcpy(&args[argspos],arg, arglen*sizeof(DWORD));
+                    } else {
+                       ERR("Set arg %d to disparg type %d vs %d\n",i,
+                           V_VT(arg),tdesc->vt
+                       );
                    }
                    argspos += arglen;
                } else {


More information about the wine-patches mailing list