Page 1 of 1

Errores de compilación con MSVC

Posted: Thu Feb 25, 2010 6:56 pm
by hgarcia
Estoy tratando de migrar de xHarbour+BC5.5 a Harbour +MSVC. Ya tengo instalada la versión correspondiente de fivewin 10.1 ya tengo instalado visual express 2008, ya logré compilar algunos fuentes fivewin pero tengo unos módulos C que al compilar me envía mensajes de compliación y mi conocimiento en C es totalmente nulo. Por más intentos que hago leyendo el help no lgor encontrar la solución a estos errores, anexo copia de los errores y la parte del código que me da problemas

Code: Select all

#include "hbrdddbf.h"
#include "hbapirdd.h"

//----------------------------------------------------------------------------//

HB_FUNC( DBFHDL )
{
    LPDBFAREA pArea = hb_rddGetCurrentWorkAreaPointer();
   if( pArea )
//      hb_retni( pArea->hDataFile );
      hb_retptr( pArea->pDataFile ); // si xharbour 1.2.1
   else
//      hb_retni( 0 );
      hb_retptr( 0 );  // si xharbour1.2.1
}

 
el error de compilación es el siguiente:

Code: Select all

    C:\Visual9.0\VC\bin\CL.EXE /DHB_FM_STATISTICS_OFF /DHB_API_MACROS /DHB_STACK_MACROS /nologo /TP /w /GA  /Ox  /D__HARBOUR__ /c /IC:\Visual9.0\VC\include /IC:\hb20\include;d:\frameworkh\include;C:\FWH10.1\include /Fo"D:\frameworkh\objhb\HBFORCE.obj" "D:\frameworkh\chb\HBFORCE.C"
HBFORCE.C
D:\frameworkh\chb\HBFORCE.C(20) : error C2440: 'inicializando' : no se puede realizar la conversi¢n de 'void *' a 'LPDBFAREA'
        La conversi¢n de 'void*' a puntero a elemento que no sea 'void' requiere una conversi¢n expl¡cita
D:\frameworkh\chb\HBFORCE.C(33) : error C2440: 'inicializando' : no se puede realizar la conversi¢n de 'void *' a 'LPDBFAREA'
        La conversi¢n de 'void*' a puntero a elemento que no sea 'void' requiere una conversi¢n expl¡cita
D:\frameworkh\chb\HBFORCE.C(44) : error C2440: 'inicializando' : no se puede realizar la conversi¢n de 'void *' a 'LPDBFAREA'
        La conversi¢n de 'void*' a puntero a elemento que no sea 'void' requiere una conversi¢n expl¡cita
D:\frameworkh\chb\HBFORCE.C(115) : error C2440: 'inicializando' : no se puede realizar la conversi¢n de 'void *' a 'ADSAREAP'
        La conversi¢n de 'void*' a puntero a elemento que no sea 'void' requiere una conversi¢n expl¡cita
D:\frameworkh\chb\HBFORCE.C(126) : error C2440: 'inicializando' : no se puede realizar la conversi¢n de 'void *' a 'ADSAREAP'
        La conversi¢n de 'void*' a puntero a elemento que no sea 'void' requiere una conversi¢n expl¡cita
D:\frameworkh\chb\HBFORCE.C(137) : error C2440: 'inicializando' : no se puede realizar la conversi¢n de 'void *' a 'ADSAREAP'
        La conversi¢n de 'void*' a puntero a elemento que no sea 'void' requiere una conversi¢n expl¡cita
Toda ayuda será bienvenida
Saludos

Re: Errores de compilación con MSVC

Posted: Fri Feb 26, 2010 1:56 am
by Antonio Linares
Héctor,

Prueba a cambiar esta línea así:

LPDBFAREA pArea = ( LPDBFAREA ) hb_rddGetCurrentWorkAreaPointer();

Re: Errores de compilación con MSVC

Posted: Fri Feb 26, 2010 3:29 am
by hgarcia
eso funciono perfecto Antonio Gracias pero ahora tengo otro problema con otro módulo

Code: Select all

/***************************************************************

This file contains the special painting routines used by TSBrowse Class
Last update: February 26th, 2008

***************************************************************/

#ifdef __HARBOUR__
#include <hbApi.h>   /* set your own path if needed */
#endif

#include <WinTen.h>   /* set your own path if needed */
#include <Windows.h>
#include <ClipApi.h>  /* set your own path if needed */
#include <shellapi.h>
#include <StdLib.h>

void  WndBoxDraw( HDC, LPRECT, HPEN, HPEN, int, BOOL ) ;
void  cDrawCursor( HWND, LPRECT, long, COLORREF ) ;
void  DrawCheck( HDC, LPRECT, HPEN, int, BOOL ) ;
DWORD GetTextExtent( HDC, LPCSTR, int ) ;

extern void DrawBitmap( HDC, HBITMAP, WORD wCol, WORD wRow, WORD wWidth,
                        WORD wHeight, DWORD dwRaster ) ;
extern void DrawMasked( HDC hdc, HBITMAP hbm, WORD y, WORD x ) ;

extern void MaskRegion( HDC hDC, RECT * rct, COLORREF cTransparent ,
                               COLORREF cBackground ) ;

static void GoToPoint( HDC, int, int ) ;

static void DegradColor( HDC, RECT *, COLORREF, COLORREF ) ;

//---------------------------------------------------------------------------//

#ifndef __HARBOUR__
CLIPPER TSDrawCell( PARAMS ) // ( hWnd, hDC, nRow, nColumn , nWidth ,
                              //   uData, nAlign , nClrFore, nClrBack ,
                               //   hFont, nBitmap, nHeightCell,
                                //   b3DLook, nLineStyle, nClrLine, nHeadFoot,
                             //   nHeightHead, nHeightFoot, hHeightSuper,
                              //   lAdjBmpl, lMultiLine, nVAlign, nVertText,
                               //   nClrTo, lDegrad, hBrush )
#else
HARBOUR HB_FUN_TSDRAWCELL( PARAMS )
#endif
{
   HWND hWnd        = (HWND) _parni( 1 ) ;
   HDC  hDC         = (HDC) _parni( 2 ) ;
   int  nRow        = _parni( 3 ) ;
   int  nColumn     = _parni( 4 ) ;
   int  nWidth      = _parni( 5 ) ;
   LPSTR cData      = (LPSTR) _parc( 6 )  ;
   int  nLen        = _parclen( 6 ) ;
   DWORD nAlign     = _parnl( 7 ) ;
   COLORREF clrFore = _parnl( 8 ) ;
   COLORREF clrBack = _parnl( 9 ) ;
   HFONT hFont      = (HFONT) _parni( 10 ) ;
   HBITMAP hBitMap  = (HBITMAP) _parni( 11 ) ;
   int nHeightCell  = _parni( 12 ) ;
   BOOL b3DLook     = _parl( 13 ) ;
   int nLineStyle   = _parni( 14 ) ;
   COLORREF clrLine = _parnl( 15 ) ;
   int nHeadFoot    = _parni( 16 ) ;
   int nHeightHead  = _parni( 17 ) ;
   int nHeightFoot  = _parni( 18 ) ;
   int nHeightSuper = _parni( 19 ) ;
   BOOL bAdjBmp     = _parl( 20 ) ;
   BOOL bMultiLine  = _parl( 21 ) ;
   int nVAlign      = _parni( 22 ) ;
   int nVertText    = _parni( 23 ) ;
   COLORREF clrTo   = _parnl( 24 ) ;
   BOOL bOpaque     = _parl( 25 ) ;
   HBRUSH wBrush    = (HBRUSH) _parnl( 26 ) ;
   BOOL b3DInv      = ( ISLOGICAL( 27 ) ? ! _parl( 27 ) : FALSE ) ;
   BOOL b3D         = ( ISLOGICAL( 27 ) ? TRUE : FALSE ) ;
   COLORREF nClr3DL = _parnl( 28 ) ;
   COLORREF nClr3DS = _parnl( 29 ) ;
   long lCursor     = _parnl( 30 ) ;

   int ixLayOut     = HIWORD( nAlign ) ;
   int iAlign       = LOWORD( nAlign ) ;
   int iTxtW        = LOWORD( GetTextExtent( hDC, cData, nLen ) ) ;
   BOOL bGrid       = ( nLineStyle > 0 ? TRUE : FALSE ) ;
   BOOL bHeader     = ( nHeadFoot == 1 ? TRUE : FALSE ) ;
   BOOL bFooter     = ( nHeadFoot == 2 ? TRUE : FALSE ) ;
   BOOL bSuper      = ( nHeadFoot == 3 ? TRUE : FALSE ) ;
   BOOL bChecked    = ( nVertText == 3 ? TRUE : FALSE ) ;
   BOOL bBrush      = ( wBrush ? TRUE : FALSE ) ;
   BOOL bDegrad     = ( clrTo == clrBack ? FALSE : TRUE ) ;
   HFONT hOldFont ;
   BOOL bDestroyDC  = FALSE ;
   HPEN hGrayPen    = (HPEN) CreatePen( PS_SOLID, 1, clrLine );
   HPEN hWhitePen   = (HPEN) CreatePen( PS_SOLID, 1, GetSysColor( COLOR_BTNHIGHLIGHT ) ) ;

   RECT rct ;
   BITMAP bm ;
   int nTop, nLeft, nBkOld, iFlags ;

   if( ! hDC )
   {
      bDestroyDC = TRUE ;
      hDC = GetDC( hWnd ) ;
   }

   if( hFont )
       hOldFont =  SelectObject( hDC, hFont ) ;

 
y el error consecuente es

Code: Select all

D:\frameworkh\chb\TSBFUNCS.C(107) : error C2440: '=' : no se puede realizar la conversi¢n de 'HGDIOBJ' a 'HFONT'
        La conversi¢n de 'void*' a puntero a elemento que no sea 'void' requiere una conversi¢n expl¡cita
D:\frameworkh\chb\TSBFUNCS.C(394) : error C2440: '=' : no se puede realizar la conversi¢n de 'HGDIOBJ' a 'HFONT'
        La conversi¢n de 'void*' a puntero a elemento que no sea 'void' requiere una conversi¢n expl¡cita
D:\frameworkh\chb\TSBFUNCS.C(496) : error C2440: '=' : no se puede realizar la conversi¢n de 'HGDIOBJ' a 'HFONT'
        La conversi¢n de 'void*' a puntero a elemento que no sea 'void' requiere una conversi¢n expl¡cita
D:\frameworkh\chb\TSBFUNCS.C(585) : error C2440: '=' : no se puede realizar la conversi¢n de 'HGDIOBJ' a 'HBRUSH'
        La conversi¢n de 'void*' a puntero a elemento que no sea 'void' requiere una conversi¢n expl¡cita
D:\frameworkh\chb\TSBFUNCS.C(610) : error C2440: '=' : no se puede realizar la conversi¢n de 'HGDIOBJ' a 'HPEN'
        La conversi¢n de 'void*' a puntero a elemento que no sea 'void' requiere una conversi¢n expl¡cita
D:\frameworkh\chb\TSBFUNCS.C(727) : error C2440: '=' : no se puede realizar la conversi¢n de 'HGDIOBJ' a 'HBRUSH'
        La conversi¢n de 'void*' a puntero a elemento que no sea 'void' requiere una conversi¢n expl¡cita
 

Re: Errores de compilación con MSVC

Posted: Fri Feb 26, 2010 8:57 am
by Antonio Linares
Héctor,

En todas las líneas en las que uses SelectObject() tendras que hacerles el "casting" al mismo tipo de la variable que recibe el valor devuelto:

hOldFont = ( HFONT ) SelectObject( hDC, hFont ) ;

ya que SelectObject() devuelve un HGDIOBJ y lo vas a guardar en un HFONT.

Re: Errores de compilación con MSVC

Posted: Fri Feb 26, 2010 12:54 pm
by hgarcia
Gracias ya pude compilar completamente
Saludos