FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Problemas con unicode
Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM
Problemas con unicode
Posted: Fri May 23, 2008 10:10 AM
Estimados se帽ores:

He descargado la versi贸n 8.05 de FWH y he recompilado todos los prg's y librerias.

El problema es que ahora usar la funci贸n GETDATEPIC de C se sale de la aplicaci贸n.
#ifdef __HARBOUR__
   CLIPPER GETDATEPICK( PARAMS ) // ( hWnd ) --> dDate
#else
   CLIPPER GETDATEPIC( PARAMS )
#endif
{
   SYSTEMTIME st;
   char date[ 9 ];
   #ifdef UNICODE
      WCHAR dateW[ 9 ];
      LPWSTR pW;
      char * pA;    
   #endif   
      
   SendMessage( ( HWND ) _parnl( 1 ), DTM_GETSYSTEMTIME, 0, ( LPARAM ) &st );
   #ifndef UNICODE
      wsprintf( date, "%4i%02i%02i", st.wYear, st.wMonth, st.wDay );
   #else
      pW = AnsiToWide( "%4i%02i%02i" );
      wsprintf( dateW, pW, st.wYear, st.wMonth, st.wDay );
      hb_xfree( pW );
      pA = WideToAnsi( dateW );
      strcpy( date, pA );
      hb_xfree( pA );
   #endif   

   _retds( date );
}


Comprobando el motivo, descubr铆 que ahora en la sentencia
#ifdef UNICODE
la evalua como correcta y la
#ifndef UNICODE
como correcta, ejecuta las l铆neas del if y eso genera la salida del programa.

驴Qu茅 tengo que cambiar para que esto funcione correctamente?
Un saludo

Fernando Gonz谩lez Diez

ALSIS Sistemas Inform谩ticos
Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM
Problemas con unicode
Posted: Fri May 23, 2008 12:05 PM
Voy localizando mas el error.

Sucede lo mismo con el ejemplo (\fwh\samples) "datetime.prg", pero funciona correctamente con el ejemplo "testdtp.prg"

Para que en "testdtp.prg" de tambien el error lo que hay que hacer es definir en el rc "testdtp.rc" la fecha con el estilo "DTS_SHOWNONE" (checkbox a la izquierda)
CONTROL "", 101, "SysDateTimePick32", WS_CHILD | WS_VISIBLE | DTS_SHOWNONE | WS_TABSTOP, 16, 13, 81, 11

Ejecutandolo de esta forma, s贸lo hay que quitar el tick de la fecha y te echa del ejecutable.

Osea,
El problema esta con la fechas con estilo "DTS_SHOWNONE", las cuales contienen un valor vacio (checkbox desmarcado) .
Estas fechas en la llamada a GETDATEPICK() genera un error en las lineas dentro del "if" de "unicode"
Un saludo

Fernando Gonz谩lez Diez

ALSIS Sistemas Inform谩ticos
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Problemas con unicode
Posted: Fri May 23, 2008 01:19 PM

Fernando,

Has recompilado los m贸dulos en C de la librer铆a ? O solo los PRGs ? (no es necesario que compiles los m贸dulos en C).

samples\DateTime.prg funciona bien con Harbour, y efectivamente parece que se cuelga con xHarbour, aunque no da GPF aqui.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Problemas con unicode
Posted: Fri May 23, 2008 01:24 PM
Fernando,

Este ejemplo comprueba si UNICODE est谩 definido. Aqui funciona bien con Harbour/xHarbour y muestra que NO est谩 definido:
#include "FiveWin.ch"

function Main()

   MsgInfo( Test() )

return nil

#pragma BEGINDUMP

#include <hbapi.h>
#include <windows.h>

HB_FUNC( TEST )
{
   #ifdef UNICODE
      hb_retc( "Unicode" );
   #else
      hb_retc( "No unicode" );
   #endif
}

#pragma ENDDUMP
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM
Problemas con unicode
Posted: Fri May 23, 2008 05:49 PM
Antonio,

Gracias por tu respuesta

Al probar tu ejemplo siempre me devuelve "No unicode"

Las pruebas que estoy haciendo ahora funciona correctamente con el unicode , con lo que no funciona bien es con la definici贸n de la funci贸n:
#ifdef __HARBOUR__
   CLIPPER GETDATEPICK( PARAMS ) // ( hWnd ) --> dDate
#else
   CLIPPER GETDATEPIC( PARAMS )
#endif

Lo tengo que sustituir por:
CLIPPER HB_FUN_GETDATEPICK( PARAMS ) // ( hWnd ) --> dDate


Pero s贸lo esta funci贸n. Un poco mas arriba en el archivo datepick.c esta la definici贸n de SetDatePick con toda la definici贸n #ifdef __HARBOUR__ y funciona correctamente.

Ya no lo entiendo. No se que he cambiado para que ahora funcione #ifdef Unicode y no funcione #ifdef __HARBOUR__

Por cierto las pruebas las estoy haciendo tanto con mi aplicaci贸n como con el ejemplo (\fwh\samples) datetime.prg
Un saludo

Fernando Gonz谩lez Diez

ALSIS Sistemas Inform谩ticos
Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM
Problemas con unicode
Posted: Fri May 23, 2008 05:58 PM

Antonio,

El problema esta en xHarbour seguro.

Dejando la versi贸n de FWH 8.05 e instalando la compilaci贸n de xHarbour que distribuias con la versi贸n 8.04 funciona todo correctamente.

En el momento que instalo la compilaci贸n de xHarbour que descargue con la versi贸n 8.05 empiezo a tener problemas.

驴Es totalmente compatible la compilaci贸n de xHarbour anterior para la nueva versi贸n de FWH?

Un saludo

Fernando Gonz谩lez Diez

ALSIS Sistemas Inform谩ticos
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Problemas con unicode
Posted: Fri May 23, 2008 06:01 PM

Fernando,

Prueba a poner #undef UNICODE al principio del fichero en C, despues de los includes

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM
Problemas con unicode
Posted: Fri May 23, 2008 06:31 PM
Antonio,

Aun poniendo "#undef UNICODE" sigue teniendo el mismo problema.

Aunque como te dec铆a en el anterior post. Ahora funciona con las l铆neas correspondientes a unicode.

Lo que no funciona son las l铆neas que definen la funci贸n:
#ifdef __HARBOUR__
   CLIPPER GETDATEPICK( PARAMS ) // ( hWnd ) --> dDate
#else
   CLIPPER GETDATEPIC( PARAMS )
#endif

Funciona cuando cambio esta l铆neas por:
#ifdef __HARBOUR__
   CLIPPER HB_FUN_GETDATEPICK( PARAMS ) // ( hWnd ) --> dDate
#else
   CLIPPER GETDATEPIC( PARAMS )
#endif


Osea, esta definci贸n de la funci贸n tengo que cambiarla de:
CLIPPER GETDATEPICK( PARAMS )

a:
CLIPPER HB_FUN_GETDATEPICK( PARAMS )


Pero ojo la funci贸n SetDatePick no la he tocado y esa es llamada de esta forma:
#ifdef __HARBOUR__
   CLIPPER SETDATEPICK( PARAMS ) // ( hWnd, wYear, wMonth, wDay, GDT )
#else
   CLIPPER SETDATEPIC( PARAMS )
#endif


Lo que no se es que he cambiado para que ahora funcione con el Unicode y sin embargo tenga que definir la funci贸n con HB_FUN_

Y por supuesto, si instalo el xharbour de la versi贸n 8.04 de FWH ya no tengo que cambiar nada y funciona todo correctamente.
Un saludo

Fernando Gonz谩lez Diez

ALSIS Sistemas Inform谩ticos
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Problemas con unicode
Posted: Fri May 23, 2008 11:34 PM

Fernando,

Al fichero en C original de FWH le aplicas la utilidad fwh\tools\clp2harb.exe ?

Es necesario pues transforma

CLIPPER GETDATEPICK( PARAMS )

en

HB_FUNC( GETDATEPICK )

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM
Problemas con unicode
Posted: Mon May 26, 2008 08:25 AM
Antonio,


Al fichero en C original de FWH le aplicas la utilidad fwh\tools\clp2harb.exe?

No, no aplicaba la utilidad clp2harb.exe

En el momento que paso el archivo datepick.c (el que se encuentra en fwh\winapi) por esta utilidad y compilo con 茅l, ya no me genera ning煤n problema.

Si compilo sin el archivo da problemas.

Si compilo sin el archivo pero con el xHarbour que ven铆a con la versi贸n 8.04 e FWH, no genera problemas.

Parece que algo ha cambiado en las versiones de xHarbour y el c贸digo fuente c (por lo menos datepick.c, no se si los dem谩s) no est谩n recompilados.
Un saludo

Fernando Gonz谩lez Diez

ALSIS Sistemas Inform谩ticos

Continue the discussion