http://bugs.winehq.org/show_bug.cgi?id=4370
------- Additional Comments From cdunn42@yahoo.com 2006-23-04 19:01 ------- Ok - put in this fixme right before the if statement :
FIXME("rgvt[i]=0x%04X\n", rgvt[i]);
Here was the output :
fixme:ole:ITypeInfo_fnInvoke rgvt[i]=0x0008 fixme:ole:ITypeInfo_fnInvoke rgvt[i]=0x400C err:ole:ITypeInfo_fnInvoke failed to convert param 1 to VT_VARIANT|VT_BYREF from VT_VARIANT|VT_BYREF
So if VT_VARIANT is not a bitmask, but VT_BYREF is (as I see it is used in that context further down in the code and is defined as 0x4000), would the correct solution maybe be to mask out VT_BYREF like this? (which by the way also succeeds in correcting my problem) :
if ((rgvt[i] & ~VT_BYREF) == VT_VARIANT) VariantCopy(&rgvarg[i], src_arg);