[Bug 15896] Exp Elite: Runtime Error '445': Object does not support this action

wine-bugs at winehq.org wine-bugs at winehq.org
Thu Dec 11 16:39:52 CST 2008


http://bugs.winehq.org/show_bug.cgi?id=15896


Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |focht at gmx.net




--- Comment #3 from Anastasius Focht <focht at 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


-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
Do not reply to this email, post in Bugzilla using the
above URL to reply.
------- You are receiving this mail because: -------
You are watching all bug changes.



More information about the wine-bugs mailing list