chr( 0 ) devuelto desde Funcion Harb

Post Reply
User avatar
goosfancito
Posts: 1392
Joined: Fri Oct 07, 2005 7:08 pm

chr( 0 ) devuelto desde Funcion Harb

Post by goosfancito »

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

#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

#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);

}
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

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

respuesta = hb_parc( -1 ) + 7; 
A partir del 7 byte, está "Adios"
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
goosfancito
Posts: 1392
Joined: Fri Oct 07, 2005 7:08 pm

Post by goosfancito »

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.
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

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

Antonio Linares
www.fivetechsoft.com
User avatar
goosfancito
Posts: 1392
Joined: Fri Oct 07, 2005 7:08 pm

Post by goosfancito »

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

"hola" + chr( 0 ) + chr( 0 ) + "Adios"  + chr( 0 ) + chr( 0 ) + "De nuevo por aca?"
Como tendría que hacer?
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
User avatar
goosfancito
Posts: 1392
Joined: Fri Oct 07, 2005 7:08 pm

Para Antonio

Post by goosfancito »

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.
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

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
goosfancito
Posts: 1392
Joined: Fri Oct 07, 2005 7:08 pm

Post by goosfancito »

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.
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
Post Reply