William
Para solucionarlo de la forma como lo usas he hecho estos cambios/subtituciones
cuando compiles ambos fuentes en C se generaran unos warning totalmete inofencivos, no les prestes atencion
dib.c
Agregar
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 );
聽 聽
聽 聽pDib = hb_xgrab( sizeof( bmf ) + lSize );
聽 聽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 ) );
聽 聽memcpy( ( char * ) pDib + sizeof( bmf ), ( void * ) Info, lSize );
聽 聽lSize += sizeof( BITMAPFILEHEADER );
聽 聽*plSize = lSize;
聽 聽
聽 聽return pDib;
}
cambiar
BOOL DibWrite( LPSTR szFileName, HGLOBAL hDIB )
{
聽 聽long lSize;
聽 聽char * pDib;
聽 聽int hBmp;
聽 聽
聽 聽pDib = DibToStr( hDIB, &lSize );
聽 聽#ifndef UNICODE
聽 聽if( ( hBmp = _lcreat( szFileName, 0 ) ) != HFILE_ERROR )
聽 聽{
聽 聽 聽 _hwrite( hBmp, ( const char * ) pDib, lSize );
聽 聽 聽 _lclose( hBmp );
聽 聽 聽 GlobalUnlock( hDIB );
聽 聽 聽 return TRUE;
聽 聽}
聽 聽#else
聽 聽if( ( hBmp = hb_fsCreate( ( unsigned char * ) szFileName, 0 ) ) != ( int ) INVALID_HANDLE_VALUE )
聽 聽{
聽 聽 聽 hb_fsWriteLarge( hBmp, ( unsigned char * ) pDib, lSize );
聽 聽 聽 hb_fsClose( hBmp );
聽 聽 聽 GlobalUnlock( hDIB );
聽 聽 聽 return TRUE;
聽 聽}
聽 聽#endif
聽 聽else
聽 聽{
聽 聽 聽 GlobalUnlock( hDIB );
聽 聽 聽 return FALSE;
聽 聽}
}
dibbmp.c
agregar prototipo
char * DibToStr( HGLOBAL hDib, long * plSize );
cambiar
HB_FUNC( BMPTOSTR ) // hBmp --> cBitmapAsString
{
聽 聽HGLOBAL hDib = ( HGLOBAL ) DibFromBitmap( ( HBITMAP ) hb_parnl( 1 ), 0, 0, NULL );
聽 聽long lSize;
聽 聽char * pDib = DibToStr( hDib, &lSize );
聽 聽hb_retclen( pDib, lSize );
聽 聽
聽 聽GlobalUnlock( hDib );
聽 聽GlobalFree( hDib );
聽 聽hb_xfree( pDib );
}