Problemas con unicode

Problemas con unicode

Postby fgondi » 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.
Code: Select all  Expand view  RUN
#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
Code: Select all  Expand view  RUN
#ifdef UNICODE
la evalua como correcta y la
Code: Select all  Expand view  RUN
#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
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Postby fgondi » 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)
Code: Select all  Expand view  RUN
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
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Postby Antonio Linares » Fri May 23, 2008 1: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42160
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Antonio Linares » Fri May 23, 2008 1:24 pm

Fernando,

Este ejemplo comprueba si UNICODE está definido. Aqui funciona bien con Harbour/xHarbour y muestra que NO está definido:
Code: Select all  Expand view  RUN
#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
User avatar
Antonio Linares
Site Admin
 
Posts: 42160
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby fgondi » Fri May 23, 2008 5: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:
Code: Select all  Expand view  RUN
#ifdef __HARBOUR__
   CLIPPER GETDATEPICK( PARAMS ) // ( hWnd ) --> dDate
#else
   CLIPPER GETDATEPIC( PARAMS )
#endif

Lo tengo que sustituir por:
Code: Select all  Expand view  RUN
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
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Postby fgondi » Fri May 23, 2008 5: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
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Postby Antonio Linares » Fri May 23, 2008 6: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42160
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby fgondi » Fri May 23, 2008 6: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:
Code: Select all  Expand view  RUN
#ifdef __HARBOUR__
   CLIPPER GETDATEPICK( PARAMS ) // ( hWnd ) --> dDate
#else
   CLIPPER GETDATEPIC( PARAMS )
#endif

Funciona cuando cambio esta líneas por:
Code: Select all  Expand view  RUN
#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:
Code: Select all  Expand view  RUN
CLIPPER GETDATEPICK( PARAMS )

a:
Code: Select all  Expand view  RUN
CLIPPER HB_FUN_GETDATEPICK( PARAMS )


Pero ojo la función SetDatePick no la he tocado y esa es llamada de esta forma:
Code: Select all  Expand view  RUN
#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
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Postby Antonio Linares » 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
User avatar
Antonio Linares
Site Admin
 
Posts: 42160
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby fgondi » Mon May 26, 2008 8: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
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 47 guests