Hi
I have a problem with an ocx (not with WineDbg this time :). To create it I do:
CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd,
nID,pPersist, bStorage, bstrLicKey);
which works fine in windows (NT4), but in Wine-20020804 I get the following:
First chance exception: e06d7363 in 32-bit code (0x400d5ee5).
Register dump:
CS:0023 SS:002b DS:002b ES:002b FS:008f GS:0000
EIP:400d5ee5 ESP:405c4e18 EBP:405c4e70 EFLAGS:00000246( - 00 I Z- -P1 )
EAX:405c4e20 EBX:4010ca04 ECX:00000000 EDX:405c4e34
ESI:405c4f4c EDI:00000000
Stack dump:
0x405c4e18 (_end+0x265cf4): 4010ca04 400ca2f2 e06d7363 00000001
0x405c4e28 (_end+0x265d04): 00000000 400d5e70 00000003 19930520
0x405c4e38 (_end+0x265d14): 405c4f84 5f4bb5d8 405c4ecc 400fbc9c
0x405c4e48 (_end+0x265d24): 405c4e74 00000400 405c4f58 405c4e80
0x405c4e58 (_end+0x265d34): 4010ca04 400da28a 00000002 40123a68
0x405c4e68 (_end+0x265d44): 00000058 40129d48 405c4e90 400ca303
0x405c4e78 (_end+0x265d54):
0011: sel=008f base=401225c0 limit=00000fff 32-bit rw-
Backtrace:
=>0 0x400d5ee5 (RaiseException+0x75(code=0xe06d7363, flags=0x1, nbargs=0x3,
args=0x405c4f4c) [except.c:81] in libntdll.dll.so) (ebp=405c4e70)
1 0x400ca303 (call_stdcall_function+0xc3(func=0x400d5e70, nb_args=0x4,
args=0x405c4f20) [relay386.c:327] in libntdll.dll.so) (ebp=405c4e90)
2 0x400ca6e8 (RELAY_CallFrom32+0x148(ret_addr=0x7800ac4e)
[relay386.c:400] in libntdll.dll.so) (ebp=405c4f14)
3 0x4076fed5 (KERNEL32.DLL.TryEnterCriticalSection+0x2b59 in
kernel32.dll.so) (ebp=405c4f58)
4 0x5f47d5b1 (MFC42.DLL.1269+0x4d in C:\WINDOWS\SYSTEM\MFC42.DLL)
(ebp=405c4f7c)
5 0x5f48ceab (MFC42.DLL.2464+0x11c in C:\WINDOWS\SYSTEM\MFC42.DLL)
(ebp=405c5004)
6 0x5f423445 (MFC42.DLL.4035+0x51 in C:\WINDOWS\SYSTEM\MFC42.DLL)
(ebp=405c502c)
7 0x5f42348d (MFC42.DLL.6095+0x43 in C:\WINDOWS\SYSTEM\MFC42.DLL)
(ebp=405c5054)
8 0x5f423520 (MFC42.DLL.5719+0x28 in C:\WINDOWS\SYSTEM\MFC42.DLL)
(ebp=405c5088)
9 0x5f42375d (MFC42.DLL.6198+0x14 in C:\WINDOWS\SYSTEM\MFC42.DLL)
(ebp=405c50f0)
10 0x5f421996 (MFC42.DLL.6621+0x86 in C:\WINDOWS\SYSTEM\MFC42.DLL)
(ebp=405c5148)
11 0x5f42168b (MFC42.DLL.6623+0x3f in C:\WINDOWS\SYSTEM\MFC42.DLL)
(ebp=405c5184)
12 0x5f421647 (MFC42.DLL.2135+0x59 in C:\WINDOWS\SYSTEM\MFC42.DLL)
(ebp=405c51d8)
13 0x3001e1ad (CIXOutWinView::Create+0x43(lpszWindowName=0x406cb3f0,
dwStyle=0x50300000, rect=0x405c5244, pParentWnd=0x41568c60, nID=0x1320,
ExtStyle=0x200, pPersist=0x0, bStorage=0x0, bstrLicKey=0x0)
[N:\IMD\Imex\Src\IXOutWin.cpp:167] in C:\IMD\BIN\IMEX.DLL) (ebp=405c520c)
(here is the above mentioned CreateControl)
0x400d5ee5 (RaiseException+0x75 [except.c:81] in libntdll.dll.so): leal
0xffffffa8(%ebp),%esp
81 RtlRaiseException( &record );
It finds the .ocx so that shouldn't be a problem. The registry should be
correct too as other ocx's I have work fine, all installed with the same
setup. This is also the reason why I believe it's something inside the ocx
code. The exception code e06d7363 means float inexact result or so, but I
never used float or double or any 64 bit integer. The OnCreate and
OnFontChanged of the ocx are called and left successfully.
I traced it down to this (shortly after OnFontChanged is left, maybe some
painting done):
08153fd8:Call kernel32.lstrlenA(405c5062 "\016") ret=5f418414
08153fd8:Ret kernel32.lstrlenA() retval=00000001 ret=5f418414
08153fd8:Call kernel32.lstrlenA(406cb3f0 "") ret=5f4184ce
08153fd8:Ret kernel32.lstrlenA() retval=00000000 ret=5f4184ce
08153fd8:Call kernel32.MultiByteToWideChar(00000000,00000000,406cb3f0
"",ffffffff,405c4f88,00000001) ret=5f4184f9
08153fd8:Ret kernel32.MultiByteToWideChar() retval=00000001 ret=5f4184f9
08153fd8:Call kernel32.GetProcAddress(65340000,00000002) ret=5f405724
08153fd8:Ret kernel32.GetProcAddress() retval=65341408 ret=5f405724
08153fd8:Call kernel32.IsBadReadPtr(405c4f98,00000020) ret=42622bce
08153fd8:Ret kernel32.IsBadReadPtr() retval=00000000 ret=42622bce
08153fd8:Call kernel32.IsBadReadPtr(405c4fd8,00000004) ret=42622bce
08153fd8:Ret kernel32.IsBadReadPtr() retval=00000000 ret=42622bce
08153fd8:Call ntdll.RtlSizeHeap(40360000,00000000,403c0738) ret=65f019c3
trace:heap:RtlSizeHeap (40360000,00000002,403c0738): returning 00000020
08153fd8:Ret ntdll.RtlSizeHeap() retval=00000020 ret=65f019c3
08153fd8:Call kernel32.RaiseException(e06d7363,00000001,00000003,405c4f4c)
ret=7800ac4e
65340000 is the handle for the OLEAUT32.DLL, function 2 seems to be
SysAllocString but it doesn't seem to get there (at least I never see my
message in the log file)..
Any ideas how I can find out what goes wrong (inside the MFC42.dll)?
Thanks
Fabi