Am Montag, den 13.10.2008, 14:30 -0400 schrieb Chris Ahrendt:
Ok I fixed the code to take this out... however : one section there is something I am not sure of so I left it in to prevent the exception from occuring.
This is an additional explanation in addition to the remarks I made to your "Try #2" mail.
here is my change that doesn't cause an exception:
ret = IDirectDraw_CreateSurface(lpDD, &desc, &dsurface, NULL); ok(ret == DD_OK, "Creating a primary surface without width and
height info returned %08x\n", ret);
/* This should be handled but CreateSurface is not returning right */ if (FAILED(ret)) { skip("Can't create cubemap surface\n"); return; }
if(dsurface) { ret = IDirectDrawSurface_GetSurfaceDesc(dsurface, &desc); ok(ret == DD_OK, "GetSurfaceDesc returned %x\n", ret);
If those lines are not there then when it gets to the ret = IDirectDrawSurface_GetSurfaceDesc(dsurface, &desc); line it throws and exception because dsurface is null.. so I am wondering if the if should be if(&dsurface) instead of the above?
Sorry, you seem to misunderstand the C language in this regard. Code flow never gets to the GetSurfaceDesc call if dsurface is NULL, because if(dsurface) means the same as if(dsurface != NULL) so the whole block is only executed if dsurface is not NULL.
You definitely do not want "if(&dsurface)" instead because that would test if the address of the variable dsurface (that is the memory location where the pointer to the interface is stored) is not NULL. This is *always* the case, as the variable "dsurface" is allocated on the stack and &dsurface is thus pointing into the stack. The check if(dsurface) checks whether the contents of the variable dsurface, which should point to the DirectDrawSurface interface, is a NULL value pointing nowhere instead, which is exactly what we need here.
Regards, Michael Karcher