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


Reply via email to