Plea to fix winelib COM vtable bug

Ove Kaaven ovehk at ping.uio.no
Sat Nov 2 10:15:22 CST 2002


On Sat, 2 Nov 2002, Matthew Bloch wrote:

> I think I'm closer now...
> 
> trace:ddraw:User_DirectDraw_Construct (0x403a7c70,0)
> 
> Program received signal SIGINT, Interrupt.
> [Switching to Thread 16384 (LWP 2877)]
> 0x40f510e4 in DDRAW_Create (lpGUID=0x0, lplpDD=0x40c92d38, pUnkOuter=0x0, 
>     iid=0x40f585d0, ex=0) at main.c:264
> 264         while(1);
> (gdb) print pDD
> $1 = (struct IDirectDraw7 *) 0x403a7c70
> (gdb) print *pDD
> $2 = {lpVtbl = 0x40f5a960}
> (gdb) print *pDD->lpVtbl
> $3 = {dummyRTTI1 = 1089756760, dummyRTTI2 = 1089756316, 
>   QueryInterface = 0x40f45cf0 <Main_DirectDraw_Release>, 
>   AddRef = 0x40f45f8c <Main_DirectDraw_Compact>, 
>   Release = 0x40f45fd4 <Main_DirectDraw_CreateClipper>, 
> 
> So the create function is apparently unaware of the dummy values and is 
> filling them in regardless... more later...

Your particular problem is probably that the
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE isn't in the vtables found in
ddraw/user.c and ddraw/hal.c, but I'd still just use
ICOM_USE_COM_INTERFACE_ATTRIBUTE to avoid this kind of problem, unless you
really want to fix all the places someone forgot this stuff...




More information about the wine-devel mailing list