FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour chr( 0 ) devuelto desde Funcion Harb
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM

chr( 0 ) devuelto desde Funcion Harb

Posted: Fri Mar 03, 2006 12:01 PM
Antonio,

En una oportunidad me respondiste a un problema que tengo con respecto a esto "hola " + chr( 0 ) + chr( 0 ) + "adios",
o sea, los chr( 0 ) con respecto a este mismo tema, Te mando un proyecto en el cual desde
Har se llama a una función que esta en C y desde esa funcion se llama a otra que esta en HAR,
la cual dicha funcion solo devuelve el contenido de una cadena.
Fijate, por favor, que cuando devuelve el contenido Return ( cRespuesta ) y
la toma nueavamente el C dicha cadena tiene solamente lo que esta antes del chr( 0 ),
lo que me indicaria que corta nuevamente la cadena, o por lo menos los restantes caracteres
no los estaria pasando.

Podrias indicarme como encarar el tema? porque la verdad necesito que se hagan esos pasos.
Llamadas desde Har a funciones de C que devuelven cadenas que contienen el
dichoso chr( 0 ).

Muchas Gracias.

Esto seria lo de har:
#include "fivewin.ch"

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

FUNCTION main( )

   LLAMADAHAR("GUSTAVO")

   RETURN ( NIL )


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

FUNCTION FUNCION_HAR( cComando )

   LOCAL cRespuesta:= "hola " + Chr( 0 ) + Chr( 0 ) + "Adios"

   RETURN ( cRespuesta )



Esto seria lo de .c


#include "winten.h"
#include "hbapi.h"
#include "windows.h"
#include "winten.h"
#include "hbapi.h"
#include "windows.h"
#include "hbvm.h"
#include "string.h"
#include "math.h"


HB_FUNC ( LLAMADAHAR ){

   char *comando = hb_parcx(1);
   char *respuesta;

   hb_vmPushSymbol( hb_dynsymGet( "FUNCION_HAR") -> pSymbol );
   hb_vmPushNil( );
   hb_vmPushString( comando, strlen( comando ) );
   hb_vmFunction( 1 );

   respuesta = hb_parc( -1 );

   MessageBox(0, respuesta,  "Contenido que devuelve funcion HAR", MB_OK);

}
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

chr( 0 ) devuelto desde Funcion Harb

Posted: Fri Mar 03, 2006 06:46 PM
Gustavo,

Tu código está bien. Es MessageBox() de Windows quien no te muestra los ceros. Haz lo siguiente y lo verás:
respuesta = hb_parc( -1 ) + 7;

A partir del 7 byte, está "Adios"
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM

chr( 0 ) devuelto desde Funcion Harb

Posted: Fri Mar 03, 2006 06:53 PM

Antonio,

La cosa parece ser no tan sencilla, probe lo que me dijiste igual que el ejemplo que me habias enviado. pero si tomas de ese codigo lo que trae la variable cRespuesta por lo menos a mi no me trae toda la cadena. O yo estoy loco.

FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

chr( 0 ) devuelto desde Funcion Harb

Posted: Fri Mar 03, 2006 10:21 PM

Has probado a llamar a MessageBox() con el valor que te he indicado ?

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM

chr( 0 ) devuelto desde Funcion Harb

Posted: Mon Mar 06, 2006 12:59 PM
Antonio,

Si, si pones + 7 Muestra Adios, pero necesito que muestre "hola y adios", o sea toda la cadena que se le pasa. no solamente la segunda parte.

Es mas, en este caso es "hola" + chr( 0 ) + chr( 0 ) + "Adios" pero si sería asi:
"hola" + chr( 0 ) + chr( 0 ) + "Adios"  + chr( 0 ) + chr( 0 ) + "De nuevo por aca?"


Como tendría que hacer?
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM

Para Antonio

Posted: Tue Mar 07, 2006 11:38 AM

Antonio,

Estamos desarrollando un proyecto el cual esto es muy importante.
Se puede de alguna manera generar esa cadena y tomarla desde funciones tantos C como xHar?

Gracias.

FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

chr( 0 ) devuelto desde Funcion Harb

Posted: Tue Mar 07, 2006 12:40 PM

Gustavo,

Si necesitas usar MessageBox() para mostrar cadenas que contengan ceros, podrias cambiar los ceros por Chr( 255 ) y dejar solo el cero del final de cadena.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM

chr( 0 ) devuelto desde Funcion Harb

Posted: Tue Mar 07, 2006 08:42 PM

Antonio,

Desde ya gracias por todo el tiempo que me estas dando, no necesito mostrar dicha cadena sino que necesito que esa cadena sea almacenada en una variable, para luego tratarla, en si la cadena guarda un contenido y luego tengo que ir tomando partes de ella (con substr(... ) ) para realizar diferentes tareas.

El tema es que cuando quise realizar esto no lo pude hacer ya que la cadena me llegaba cortada a la variable que la pasaba.

si me permitis te envio a tu correo personal las rutinas para que observer el trabajo que necesito hacer.

FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/

Continue the discussion