question regarding dibsections

Marcus Meissner marcus at jet.franken.de
Fri Apr 28 15:38:13 CDT 2006


On Mon, Apr 24, 2006 at 09:44:50PM +0200, Marcus Meissner wrote:
> Hi,
> 
> While debugging twain, I came across the nativexfer method, used by 60-70%
> of all twain using programs.
> 
> It has some very unfortunate programming logic.
> 
> Here is a sample snippet from:
> 	http://hp.vector.co.jp/authors/VA011973/prg_twain.htm
> 
> 	TW_UINT16 rc;
> 	TW_UINT32 hBitmap;
> 	TW_BOOL PendingXfers = TRUE;
> 	LPBITMAPINFOHEADER      lpDib;
> 
> 	hBitmap = NULL;
> 	rc = lpfnDSM_Entry(pAppId,pSourceId,DG_IMAGE,DAT_IMAGENATIVEXFER,MSG_GET,(TW_MEMREF)&hBitmap);
> 	lpDib = (LPBITMAPINFOHEADER)GlobalLock((void*)hBitmap);
> 	/* ... */
> 	if(lpdib!=NULL){
> 		GlobalUnlock((void*)hBitmap);
> 		GlobalFree((void*)hBitmap);
> 	}
> 
> (hBitmap is the return value of CreateDIBSection()).
> 
> This sample code apparently assumes that GlobalLock(HBITMAP) gives it
> a pointer to a BITMAPINFOHEADER.

It also expects the DIB bits right behind this header (+ palette), which absolutely
does not match our currently DIB memory layouts.

I expect much fun :)

Ciao, Marcus



More information about the wine-devel mailing list