chr( 0 ) devuelto desde Funcion Harb

chr( 0 ) devuelto desde Funcion Harb

Postby goosfancito » 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:
Code: Select all  Expand view  RUN
#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


Code: Select all  Expand view  RUN
#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/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Postby Antonio Linares » Fri Mar 03, 2006 6: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:
Code: Select all  Expand view  RUN
respuesta = hb_parc( -1 ) + 7;

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

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42122
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby goosfancito » Fri Mar 03, 2006 6: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/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

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

Postby goosfancito » 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:
Code: Select all  Expand view  RUN
"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/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Para Antonio

Postby goosfancito » 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/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

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

Postby goosfancito » Tue Mar 07, 2006 8: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/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm


Return to FiveWin para Harbour/xHarbour

Who is online

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