On Friday 01 November 2002 12:19, Lionel Ulmer wrote:
Yes, to my eye it looks like a linking problem but I'm not sure how to tell. Maybe if I whittle it down to a single .c file which I can post to the list it'll make it easier to diagnose.
Well, the easier would be that, yes. Basically, just create the DDraw interface (as done in createDirectDrawObject) and call 'CreateSurface' on it. That should be enough to reproduce the problem (now that I think of it, I could do it myself, but well, I have no experience about creating Winelib apps :-) ).
Okay, calling this function as the first statement in my WinMain causes exactly the same crash:
------------------------------------------------------------------------- void dummy(void) { IDirectDraw* dd; IDirectDrawSurface *surface; DDSURFACEDESC ddsd; HRESULT hr; memset(&ddsd, 0, sizeof(DDSURFACEDESC)); ddsd.dwSize = sizeof(DDSURFACEDESC); ddsd.dwFlags = DDSD_CAPS; ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; if (DirectDrawCreate(0, &dd, NULL)) { exit(1); } if (dd->CreateSurface(&ddsd, &surface, NULL)) { exit(2); } printf("created surface okay!\n");
} -------------------------------------------------------------------------
though I'm not sure why it ends up in the environ() function...?
------------------------------------------------------------------------- (gdb) bt #0 0x400114a9 in environ () from /lib/ld-linux.so.2 #1 0x40f49323 in User_DirectDraw_EnumDisplayModes (iface=0x403a7620, dwFlags=1086926012, pDDSD=0x40c92d34, context=0x40c92cf8, callback=0x40f481c0 <EnumDisplayModesCallbackThunk>) at ddraw/user.c:373 #2 0x40f48245 in IDirectDrawImpl_EnumDisplayModes (This=0x40c92cf8, dwFlags=1086926140, pDDSD=0x40c92d34, context=0x40c92ba4, cb=0x40c92ba4) at ddraw/thunks.c:348 #3 0x4082d85e in dummy () at Source/Main.cpp:325 #4 0x4082d891 in WinMain (hInst=0x40620000, hPrevInst=0x0, lpCmdLine=0x403710c5 "", nCmdShow=1) at Source/Main.cpp:340 #5 0x4062509c in __wine_exe_main () from /home/mattbee/Work/Nemesis/LSNClient.exe #6 0x400b37ed in start_process () at ../../scheduler/process.c:564 #7 0x400b771d in call_on_thread_stack (func=0x400b35ac) at ../../scheduler/sysdeps.c:112 -------------------------------------------------------------------------
disassembly looks like this:
------------------------------------------------------------------------- 00000768 <dummy__Fv>: 768: 55 push %ebp 769: 89 e5 mov %esp,%ebp 76b: 81 ec 88 00 00 00 sub $0x88,%esp 771: 83 c4 fc add $0xfffffffc,%esp 774: 6a 6c push $0x6c 776: 6a 00 push $0x0 778: 8d 45 94 lea 0xffffff94(%ebp),%eax 77b: 50 push %eax 77c: e8 fc ff ff ff call 77d <dummy__Fv+0x15> 781: c7 45 94 6c 00 00 00 movl $0x6c,0xffffff94(%ebp) 788: c7 45 98 01 00 00 00 movl $0x1,0xffffff98(%ebp) 78f: c7 45 fc 00 02 00 00 movl $0x200,0xfffffffc(%ebp) 796: 83 c4 fc add $0xfffffffc,%esp 799: 6a 00 push $0x0 79b: 8d 45 90 lea 0xffffff90(%ebp),%eax 79e: 50 push %eax 79f: 6a 00 push $0x0 7a1: e8 fc ff ff ff call 7a2 <dummy__Fv+0x3a> 7a6: 83 c4 14 add $0x14,%esp 7a9: 85 c0 test %eax,%eax 7ab: 74 0a je 7b7 <dummy__Fv+0x4f> 7ad: 83 c4 f4 add $0xfffffff4,%esp 7b0: 6a 01 push $0x1 7b2: e8 fc ff ff ff call 7b3 <dummy__Fv+0x4b> 7b7: 8b 45 90 mov 0xffffff90(%ebp),%eax 7ba: 8b 10 mov (%eax),%edx 7bc: 6a 00 push $0x0 7be: 8d 45 8c lea 0xffffff8c(%ebp),%eax 7c1: 50 push %eax 7c2: 8d 45 94 lea 0xffffff94(%ebp),%eax 7c5: 50 push %eax 7c6: ff 75 90 pushl 0xffffff90(%ebp) 7c9: 8b 42 20 mov 0x20(%edx),%eax 7cc: ff d0 call *%eax 7ce: 85 c0 test %eax,%eax 7d0: 74 0e je 7e0 <dummy__Fv+0x78> 7d2: 83 c4 f4 add $0xfffffff4,%esp 7d5: 6a 02 push $0x2 7d7: e8 fc ff ff ff call 7d8 <dummy__Fv+0x70> 7dc: 8d 74 26 00 lea 0x0(%esi,1),%esi 7e0: 83 c4 f4 add $0xfffffff4,%esp 7e3: 68 50 00 00 00 push $0x50 7e8: e8 fc ff ff ff call 7e9 <dummy__Fv+0x81> 7ed: c9 leave 7ee: c3 ret 7ef: 90 nop -------------------------------------------------------------------------
and the ddraw trace looks like this:
------------------------------------------------------------------------- trace:ddraw:initialize enabling DirectDraw HAL trace:ddraw:DDRAW_Create ((null),0x40c92d38,(nil)) trace:ddraw:DDRAW_FindDriver ((null)) trace:ddraw:HAL_DirectDraw_Create trace:ddraw:HAL_DirectDraw_Construct (0x403a7390) trace:ddraw:User_DirectDraw_Construct (0x403a7390,0) trace:ddraw:Main_DirectDraw_QueryInterface (0x403a7390)->({6c14db80-a733-11ce-a521-0020af0be560},0x40c92d38) trace:ddraw:Main_DirectDraw_AddRef (0x403a7390)->() incrementing from 1. trace:ddraw:Main_DirectDraw_Release (0x403a7390)->() decrementing from 2. trace:ddraw:User_DirectDraw_EnumDisplayModes (0x403a7390)->(0x40c92d3c,0x40c92d34,0x40c92cf8,0x40f481c0) trace:ddraw:User_DirectDraw_EnumDisplayModes - mode: 512x384 trace:ddraw:User_DirectDraw_EnumDisplayModes - 8 bpp, R=00000000 G=00000000 B=00000000 -------------------------------------------------------------------------
Any comments would be appreciated.