VB-Error: Type mismatch

Fabian Cenedese Cenedese at indel.ch
Thu Feb 12 02:46:55 CST 2004


Hi

Who invented VB...? Ah yeah, right...

I'm trying (again) to run a VB app on wine. But it never shows up. Instead
I only see a dialog with this Type mismatch error and then it quits. I tried
to find the place where it goes wrong. Apparently it tries to parse a number
from a string in VB notation.
0009:trace:ole:VarParseNumFromStr (L"&H8000",1024,0x00000000,0x408bdee0,0x408bdae0)

With my own debug messages I found that it bails out with this reason:
ole:VarParseNumFromStr: Not all chars were consumed

This leads to a nice exception which is caught from the VB dll:
0009:Call kernel32.RaiseException(c000008f,00000001,00000002,408be0c8) ret=6a87479d
0009:trace:seh:EXC_RtlRaiseException code=c000008f flags=1 addr=0x404b9b30
0009:trace:seh:EXC_RtlRaiseException  info[0]=deadcafe
0009:trace:seh:EXC_RtlRaiseException  info[1]=deadcafe
0009:trace:seh:EXC_RtlRaiseException  eax=408bdf70 ebx=4057691c ecx=00000000 edx=00000004 esi=408be0d0 edi=408bdf8c
0009:trace:seh:EXC_RtlRaiseException  ebp=408bdfcc esp=408bdf70 cs=0023 ds=002b es=002b fs=1007 gs=0000 flags=00000212
0009:trace:seh:EXC_CallHandler calling handler at 0x11004246 code=c000008f flags=1
0009:CALL MSVBVM60.__vbaExceptHandler(<unknown, check return>(0x40340000,00000002,00000040): returning 42b4c020
) ret=401cac8b

And this in return presents me the nice error dialog.
0009:trace:resource:LoadStringW L"Type mismatch" loaded !

Is this function VarParseNumFromStr supposed to understand VB notation
as well? The docs from MS I found don't say anything about how the numbers
have to be formed to be parsed well. In a small test program in C I only got
the same result on Windows for these parameters. So the implementation
seems ok so far. But then where did this string come from? Some
property?

0009:Call oleaut32.SysAllocStringLen(42b4b70c L"FontColor",00000009) ret=6a939fac
0009:trace:heap:RtlAllocateHeap (0x40340000,00000002,00000018): returning 42b4b6a8
0009:Ret  oleaut32.SysAllocStringLen() retval=42b4b6ac ret=6a939fac
0009:Call user32.CharUpperBuffW(42b4b6ac L"FontColor",0000000a) ret=6a934b66
0009:Ret  user32.CharUpperBuffW() retval=0000000a ret=6a934b66
0009:RET  MSVBVM60.rtcUpperCaseVar() retval=408be230 ret=1102ff69
0009:CALL MSVBVM60.__vbaVarTstEq(408be1e0,408be230) ret=1102ff8e
0009:Call oleaut32.VarCmp(408be230,408be1e0,00000000,00030001) ret=6a94f05b
0009:trace:ole:VarCmp (0x408be230->(VT_BSTR),0x408be1e0->(VT_BSTR|VT_HARDTYPE),0x00000000,0x00030001)
0009:trace:ole:VariantInit (0x408bdff8)
0009:trace:ole:VariantInit (0x408be008)
0009:Call kernel32.CompareStringW(00000000,00030001,42b4b6ac L"FONTCOLOR",ffffffff,1100b858 L"VALUE",ffffffff) ret=40c164be
0009:Ret  kernel32.CompareStringW() retval=00000001 ret=40c164be
0009:Ret  oleaut32.VarCmp() retval=00000000 ret=6a94f05b
0009:RET  MSVBVM60.__vbaVarTstEq() retval=00000000 ret=1102ff8e
0009:CALL MSVBVM60.__vbaFreeVar() ret=1102ff96
0009:Call oleaut32.SysFreeString(42b4b6ac L"FONTCOLOR") ret=6a94f0df
0009:trace:heap:RtlFreeHeap (0x40340000,00000002,42b4b6a8): returning TRUE
0009:Ret  oleaut32.SysFreeString() retval=00000001 ret=6a94f0df
0009:RET  MSVBVM60.__vbaFreeVar() retval=00000001 ret=1102ff96
0009:CALL MSVBVM60.rtcMidCharVar(408be220,408be1f0,00000003,408be230) ret=1102ffff
0009:Call oleaut32.SysAllocStringByteLen(42b4bfb8,00000008) ret=6a8742d9
0009:trace:heap:RtlAllocateHeap (0x40340000,00000002,00000018): returning 42b4b6a8
0009:Ret  oleaut32.SysAllocStringByteLen() retval=42b4b6ac ret=6a8742d9
0009:RET  MSVBVM60.rtcMidCharVar() retval=408be220 ret=1102ffff
0009:CALL MSVBVM60.__vbaVarCat(408be210,408be220,408be1d0) ret=11030014
0009:Call oleaut32.VarCat(408be1d0,408be220,408be210) ret=6a938e10
0009:trace:ole:VarCat (0x408be1d0->(VT_BSTR),0x408be220->(VT_BSTR),0x408be210)
0009:trace:heap:RtlAllocateHeap (0x40340000,00000002,00000018): returning 42b4bfd0

VARIANT: VarCat: L"&H"+L"8000"=L"&H8000"
and so on

I know that color properties can have standard system values which start with &H8000...
But is this the reason? And why does this get into VarParseNumFromStr?

Thanks

bye  Fabi





More information about the wine-devel mailing list