Esta es el código de la función DibToStr() que está en FWH/source/winapi/dib.c
Te agradecería mucho si le pones algunas trazas con MessageBox() y me indicas hasta donde llega antes de generarse el GPF, gracias:
- Code: Select all Expand view
- char * DibToStr( HGLOBAL hDib, long * plSize )
{
LPBITMAPINFO Info = ( LPBITMAPINFO ) GlobalLock( hDib );
void * Bits = ( void * ) ( ( char * ) Info + Info->bmiHeader.biSize +
wDIBColors( ( LPBITMAPINFOHEADER ) Info ) * sizeof( RGBQUAD ) );
BITMAPFILEHEADER bmf;
char * pDib;
long lSize;
lSize = GlobalSize( ( HGLOBAL ) Info );
MessageBox( 0, "1", "ok", MB_ICONINFORMATION );
pDib = ( char * ) hb_xgrab( sizeof( bmf ) + lSize );
MessageBox( 0, "2", "ok", MB_ICONINFORMATION );
bmf.bfType = 0x4D42;
bmf.bfSize = sizeof( bmf ) + lSize;
bmf.bfReserved1 = 0;
bmf.bfReserved2 = 0;
bmf.bfOffBits = sizeof( bmf ) + ( LONG ) Bits - ( LONG ) Info;
memcpy( pDib, &bmf, sizeof( bmf ) );
MessageBox( 0, "3", "ok", MB_ICONINFORMATION );
memcpy( ( char * ) pDib + sizeof( bmf ), ( void * ) Info, lSize );
MessageBox( 0, "4", "ok", MB_ICONINFORMATION );
lSize += sizeof( BITMAPFILEHEADER );
*plSize = lSize;
return pDib;
}