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...