http://bugs.winehq.org/show_bug.cgi?id=15896
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |focht@gmx.net
--- Comment #3 from Anastasius Focht focht@gmx.net 2008-12-11 16:39:50 --- Hello,
--- quote --- Has anyone been able to get to the root of this bug? --- quote ---
sure ... a quickie ;-)
--- snip --- 001d:trace:ole:dump_Variant 0x32f4a0->{VT_BSTR|VT_BYREF,0x32f754} 001d:trace:variant:VariantCopy (0x1b11a8->(VT_EMPTY),0x32f4a0->(VT_BSTR|VT_BYREF)) 001d:trace:variant:VariantClear (0x1b11a8->(VT_EMPTY)) 001d:trace:ole:DispCallFunc (0x1b09d8, 208, 4, 10, 5, 0x1b120c, 0x1b11f8, 0x32f2ac (vt=10)) 001d:trace:ole:DispCallFunc arg 0: type 16396, size 1 001d:trace:ole:dump_Variant 0x1b1158->{VT_VARIANT|VT_BYREF,0x1b11a8} 001d:trace:ole:DispCallFunc arg 1: type 16396, size 1 001d:trace:ole:dump_Variant 0x1b1168->{VT_VARIANT|VT_BYREF,0x1b11b8} 001d:trace:ole:DispCallFunc arg 2: type 16396, size 1 001d:trace:ole:dump_Variant 0x1b1178->{VT_VARIANT|VT_BYREF,0x1b11c8} 001d:trace:ole:DispCallFunc arg 3: type 16396, size 1 001d:trace:ole:dump_Variant 0x1b1188->{VT_VARIANT|VT_BYREF,0x1b11d8} 001d:trace:ole:DispCallFunc arg 4: type 16396, size 1 001d:trace:ole:dump_Variant 0x1b1198->{VT_VARIANT|VT_BYREF,0x1b11e8} 001d:Call ntdll.RtlAllocateHeap(00110000,00000000,00000018) ret=60730623 001d:Ret ntdll.RtlAllocateHeap() retval=001b1220 ret=60730623 001d:trace:ole:DispCallFunc Storing arg 0 (16396 as 16396) 001d:trace:ole:DispCallFunc Storing arg 1 (16396 as 16396) 001d:trace:ole:DispCallFunc Storing arg 2 (16396 as 16396) 001d:trace:ole:DispCallFunc Storing arg 3 (16396 as 16396) 001d:trace:ole:DispCallFunc Storing arg 4 (16396 as 16396) 001d:trace:ole:_invoke Calling 0x610f36c0(001b09d8,001b11a8,001b11b8,001b11c8,001b11d8,001b11e8,) 001d:fixme:shdocvw:WebBrowser_Navigate2 Unsupported V_VT(URL) 16392 001d:trace:ole:_invoke returns 80070057 001d:trace:ole:DispCallFunc Method returned 0x80070057 001d:trace:variant:VariantClear (0x1b1158->(VT_VARIANT|VT_BYREF)) 001d:warn:ole:ITypeInfo_fnInvoke invoked function failed with error 0x80070057 ... 001d:Call KERNEL32.RaiseException(c000008f,00000001,00000002,0032f3b0) ret=66024d53 ... 001d:Call user32.LoadStringA(66000000,00002711,0032e8e4,000001f4) ret=660df8a3 001d:Ret user32.LoadStringA() retval=00000022 ret=660df8a3 001d:Call KERNEL32.MultiByteToWideChar(00000000,00000000,0032e8e4 "Invalid procedure call or argument",ffffffff,00000000,00000000) ret=660dfa56 .. --- snip ---
Looks like the Visual Basic 6 runtime passes URL BSTR argument by reference to WebBrowser_Navigate2. To fix this, expand the validation of URL variant type to also allow (VT_BSTR|VT_BYREF). Before calling navigate_url(), just convert URL arg using VariantCopyInd() which should automagically dereference any VT_BSTR|VT_BYREF while covering the standard VT_BSTR case (URL variant passed without ref).
The navigate call will succeed then - only to display HTML error because the URL doesn't exist anymore.
When the VT_BSTR|VT_BYREF URL param problem is fixed, the app will still show "Run-time error: '445': object does not support this action." Be aware that code 445 is a generic Visual Basic error and doesn't map to a specific win32 API failure. That error is due to another webbrowser control insufficiency. Create separate bug report for it.
Anyway, this fix should also help other apps to go further.
Regards