Page 1 of 2

MIGRACION DE XHARBOUR A HARBOUR

PostPosted: Mon Jun 23, 2014 10:28 am
by Manuel Valdenebro
Siguiendo las recomendaciones, me he decidido a probar cambiar una de mis aplicaciones que corre en xHarbour+FWH a Harbour+FWH.

Con xHarbour no tengo ningún problema.

1) He compilado mi librería privada, sin problemas.

2) He añadido a los ficheros fivewin.ch y winapi.ch mis definiciones personales.

3) Trabajo con xEdit y simplemente he tenido que cambiar en el ambiente FIVEWIN el compilador de xHarbour a Harbour, cambiando los directorios.

4) Mi compilador es el antiguo BCC55.

Al compilar he visto que la función AT() en Harbour es exactamente igual que en Clipper y no tiene los dos parámetros extendidos de xHarbour nStart y nEnd,me imagino que se podría sustituir con un substring:

Actualmente: nFinPoint := AT("-", cCalle, 8 ) cambiar a nFinPoint := AT("-", SUBS(cCalle, 8 ) )
¿Hay otra solución?

Por otra parte veo que no admite el caracter | en el siguiente código:
STYLE CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT

¿Alguna idea?

Re: MIGRACION DE XHARBOUR A HARBOUR

PostPosted: Mon Jun 23, 2014 12:05 pm
by hmpaquito
hb_At( <cSearch>, <cString>, [<nStart>], [<nEnd>] ) --> nPos

Re: MIGRACION DE XHARBOUR A HARBOUR

PostPosted: Mon Jun 23, 2014 1:51 pm
by Antonio Linares
Manuel,

> STYLE CBS_DROPDOWNLIST | CBS_NOINTEGRALHEIGHT

Puedes usar la función nOr() de FWH:

STYLE nOr( CBS_DROPDOWNLIST, CBS_NOINTEGRALHEIGHT )

Ya te falta muy poco y verás que bien funciona Harbour :-)

Re: MIGRACION DE XHARBOUR A HARBOUR

PostPosted: Mon Jun 23, 2014 3:15 pm
by Manuel Valdenebro
Muchas gracias Antonio y Paquito,

Con la función STR() mas de lo mismo. xHarbour tiene un cuarto parámetro lógico que si es true, hace un LTRIM().

Estoy usando como manual de Harbour el de la web http://harbour.github.io/doc/index.html que es un poco inoperativo, porque cuesta buscar cada uno de los comandos. ¿Tiene Harbour otro tipo de manual, donde sea mas fácil leer las funciones que tiene y sus especificaciones?

Re: MIGRACION DE XHARBOUR A HARBOUR

PostPosted: Mon Jun 23, 2014 3:51 pm
by hmpaquito
Manuel,

En http://www.harbourdoc.com.br/ no he visto equivalente al Str() de xHarbour... no se si en el Manual de Harbour de Giovanni pondra algo... tb. hbIde de Pritpal Bedi también tiene un manual de Harbour.... Alexander Kresin también tiene un manual http://www.kresin.ru/en/


Mi parecer es el siguiente: la sobrecarga de parametros algunas veces no me gusta... puede ser el caso del Str() de xHarbour.
Lo que yo en tu caso para tener identificados TODOS los casos de cocnversion seria hacer unos translates de conversion y asi tenerlos todos
identificados para un mejor mantenimiento del programa. Además, mejorando un poquito podrás conservar la compatibilidad con xHarbour... que viene muy bien al menos durante el período que dure la conversión hasta hacerla completa de Harbour. Y por si fuera poco, el .ch será un recopilatorio de las transformaciones que se pueden hacer y que podremos completar y compartir entre todos....

Code: Select all  Expand view
// x2h.ch
// xHarbour to Harbour translation
#ifdef __XHARBOUR__
   #Translate X2H_STR(<x1>, <x2>, <x3>[, <x4>]) => Str(<x1>, <x2>, <x3>, <x4> )
   #Translate X2H_AT(.....................

#else
   #Translate X2H_STR(<x1>, <x2>, <x3>[, <x4>]) => If(<.x4.> [.and. <x4>], LTrim(Str(<x1>, <x2>, <x3>)), Str(<x1>, <x2>, <x3>) )
   #Translate X2H_AT(.....................
#endif

// Ejemplo de uso...
FUNCTION Main()
c:= X2H_STR(10, 5, 2, .t.)
RETURN NIL
 

Saludos

Re: MIGRACION DE XHARBOUR A HARBOUR

PostPosted: Mon Jun 23, 2014 8:00 pm
by Manuel Valdenebro
Muchas gracias

Re: MIGRACION DE XHARBOUR A HARBOUR

PostPosted: Mon Jun 23, 2014 9:10 pm
by Antonio Linares
Manuel,

Aqui tienes una copia de la documentación de Harbour, que colgamos en nuestro servidor para asi tenerla a mano:

http://www.fivetechsoft.com/harbour-docs/harbour-reference-guide.htm

En cuanto a las funciones que comentas, puedes hacer como te indica Paco, ó simplemente crearte una sencillas funciones que te proporcionen la funcionalidad extra que necesites. Yo siempre he sido contrario a usar capacidades "propias" de xHarbour, para asi tener la libertad de construir con Harbour ó xHarbour (puesto que soportamos ambos). Pero ya verás que son unos cambios mínimos que podrás solucionar facilmente :-)

Re: MIGRACION DE XHARBOUR A HARBOUR

PostPosted: Mon Jun 23, 2014 9:37 pm
by Manuel Valdenebro
Al compilar me da ahora tres errores:


Error: Unresolved external '_HB_FUN_HB_GT_GUI_DEFAULT' referenced from F:\FWH2012\LIB\FIVEH.LIB|ERRSYSW

Error: Unresolved external '_hb_gcAlloc' referenced from F:\FWH2012\LIB\DOLPHIN.LIB|function

Error: Unresolved external '_hb_retclenAdopt' referenced from F:\FWH2012\LIB\DOLPHIN.LIB|function

Respecto a Dolphin, he compilado las fuentes con el setenvh.bat para Harbour y creado la nueva lib.

Parece que ya queda menos.

Estas son las librerias del proyecto:

<Library Filename="F:\fwh2012\lib\FiveH.lib" Link="Y"/>
<Library Filename="F:\fwh2012\lib\FiveHC.lib" Link="Y"/>
<Library Filename="F:\fwh2012\lib\dolphin.lib" Link="Y"/>
<Library Filename="F:\fwh2012\lib\libmysql.lib" Link="Y"/>
<Library Filename="[harbour]xhb.lib" Link="Y"/>
<Library Filename="[harbour]hbrtl.lib" Link="Y"/>
<Library Filename="[harbour]hbvm.lib" Link="Y"/>
<Library Filename="[harbour]gtwin.lib" Link="Y"/>
<Library Filename="[harbour]hblang.lib" Link="Y"/>
<Library Filename="[harbour]hbmacro.lib" Link="Y"/>
<Library Filename="[harbour]hbcommon.lib" Link="Y"/>
<Library Filename="[harbour]hbpp.lib" Link="Y"/>
<Library Filename="[harbour]hbcpage.lib" Link="Y"/>
<Library Filename="[harbour]hbdebug.lib" Link="Y"/>
<Library Filename="[harbour]hbrdd.lib" Link="Y"/>
<Library Filename="[harbour]rddntx.lib" Link="Y"/>
<Library Filename="[harbour]hbwin.lib" Link="Y"/>
<Library Filename="[harbour]hbcplr.lib" Link="Y"/>
<Library Filename="[harbour]rddcdx.lib" Link="Y"/>
<Library Filename="[harbour]rddfpt.lib" Link="Y"/>
<Library Filename="[harbour]hbsix.lib" Link="Y"/>
<Library Filename="[harbour]hbziparc.lib" Link="Y"/>
<Library Filename="[harbour]hbmzip.lib" Link="Y"/>
<Library Filename="[harbour]hbzlib.lib" Link="Y"/>
<Library Filename="[harbour]minizip.lib" Link="Y"/>
<Library Filename="[harbour]png.lib" Link="Y"/>
<Library Filename="[harbour]hbct.lib" Link="Y"/>
<Library Filename="[harbour]hbpcre.lib" Link="Y"/>
<Library Filename="[bcc]c0w32.obj" Link="Y"/>
<Library Filename="[bcc]psdk\odbc32.lib" Link="Y"/>
<Library Filename="[bcc]psdk\msimg32.lib" Link="Y"/>
<Library Filename="[bcc]cw32.lib" Link="Y"/>
<Library Filename="[bcc]import32.lib" Link="Y"/>
<Library Filename="[bcc]wininet.lib" Link="Y"/>
<Library Filename="[bcc]PSDK\psapi.lib" Link="Y"/>

Re: MIGRACION DE XHARBOUR A HARBOUR

PostPosted: Tue Jun 24, 2014 10:21 am
by Antonio Linares
Manuel,

Revisa las librerias que enlazamos desde samples\buildh.bat

Que herramienta estas usando para construir tus EXEs ?

Re: MIGRACION DE XHARBOUR A HARBOUR

PostPosted: Tue Jun 24, 2014 2:15 pm
by Manuel Valdenebro
Antonio Linares wrote:Revisa las librerias que enlazamos desde samples\buildh.bat
Que herramienta estas usando para construir tus EXEs ?


Gracias Antonio por contestar.

Me faltaba la libreria gtwin

Re: MIGRACION DE XHARBOUR A HARBOUR (SOLUCIONADO)

PostPosted: Tue Jun 24, 2014 2:35 pm
by Antonio Linares
Manuel,

Estás enlazando gtgui.lib además de gtwin.lib ?

Sería muy conveniente que comiences a usar BCC582. BCC55 es bastante antiguo ya y le faltan cosas importantes que estan en BCC582.

Envíame un email y te indico desde donde puedes descargarlo (Embarcadero).

Re: MIGRACION DE XHARBOUR A HARBOUR

PostPosted: Tue Jun 24, 2014 7:44 pm
by Manuel Valdenebro
Actualizado el compilador a BCC582.

Pero ahora sale un warning que antes no salía con BCC55. Se trata de dos códigos en C de la libreria de Thefull Tscan:

Warning W8075 TSCAN.prg 495: Suspicious pointer conversion in function HB_FUN_TW_GETNEXTSOURCENAME
Warning W8075 TSCAN.prg 500: Suspicious pointer conversion in function HB_FUN_TW_GETDEFAULTSOURCENAME

Este es el código.

HB_FUNC( TW_GETNEXTSOURCENAME )
{
hb_retni( TWAIN_GetNextSourceName( hb_parc( 1 ) ) );
}

HB_FUNC( TW_GETDEFAULTSOURCENAME )
{
hb_retni( TWAIN_GetDefaultSourceName( hb_parc( 1 ) ));
}


¿Pudiera ser que la librería de TheFull estuviera compilada con BCC55?

Re: MIGRACION DE XHARBOUR A HARBOUR

PostPosted: Tue Jun 24, 2014 9:22 pm
by Antonio Linares
Manuel,

Esos warnings se deben posiblemente a que BCC582 funciona mejor que BCC55, puesto que la declaración de esa función es:

BOOL EZTAPI TWAIN_GetNextSourceName(LPSTR pzName);

luego el código debería ser:
Code: Select all  Expand view
HB_FUNC( TW_GETNEXTSOURCENAME )
{
   hb_retl( TWAIN_GetNextSourceName( hb_parc( 1 ) ) );
}

Re: MIGRACION DE XHARBOUR A HARBOUR

PostPosted: Tue Jun 24, 2014 9:24 pm
by Antonio Linares
E igual para la otra función:

BOOL EZTAPI TWAIN_GetDefaultSourceName(LPSTR pzName);

luego debería ser:
Code: Select all  Expand view
HB_FUNC( TW_GETDEFAULTSOURCENAME )
{
   hb_retl( TWAIN_GetDefaultSourceName( hb_parc( 1 ) ) );
}

Re: MIGRACION DE XHARBOUR A HARBOUR

PostPosted: Wed Jun 25, 2014 6:13 am
by Manuel Valdenebro
Buenos dias Antonio,

Realizado los cambios, siguen los mismos warning.