Robert Shearman wrote:
The fix is to do the following in the conversion loop in
ITypeInfo::Invoke:
if (rgvt[i] == VT_VARIANT)
VariantCopy(&rgvarg[i], src_arg);
else if ((rgvt[i] & VT_BYREF) && !V_ISBYREF(src_arg))
...
I don't have time to put this into patch form and test it, but
hopefully someone else will.
I tried this on the test app. It did not work. Sure, the code reaches
the DispCallFunc call, but then the actual code from inside the control
fails the call. It seems that the type of the variant is not adequate
for the parameter. Visual Basic shows a message: "Application-defined or
user defined error". It seems that I will have to wait until I code
enough of a test case for a *successful* ITypeInfo::Invoke() (there are
two tests of failing calls, but none of a successful one), so that I can
see what native OLEAUT32.DLL is sending as the parameter. Unless
somebody else beats me on this.
Alex Villacís Lasso