Page 1 of 1

hb_parcx( -1 ) como funciona?

Posted: Mon Jul 17, 2006 1:35 pm
by goosfancito
Amigos,

Code: Select all

      hb_vmPushSymbol( hb_dynsymGet( "LEECONFIGURACION") -> pSymbol );
      hb_vmPushNil( );
      hb_vmPushString( comando, strlen( comando ) );
      hb_vmPushLogical( FALSE );
      hb_vmFunction( 2 );
      respuesta = hb_parcx( -1 );
Tengo ese código, y la función LEECONFIGURACION la cual es llamada, devuelve un dato de este tipo ( siempre con un chr( 0 ) como primer caracter ):

Code: Select all

comando:= chr( 0 ) + "anulado + chr( 10 ) + chr( 9 )
El problema es que:

Code: Select all

respuesta = hb_parcx( -1 );
No me devuelve el primer chr( 0 ), ya lo he verificado de diferentes maneras, escribiendoló en un .txt y viendo con un editor DOS, entre otras cosas.
Verifiqué que "antes de devolver comando en la funcion LEECONFIGURACION el chr( 0 ) exista, y si existe.

Alguna Idea?
Gracias.

Posted: Mon Jul 17, 2006 2:51 pm
by thefull
Creo que esto esta mal:
hb_parcx( -1 ), sirve para recoger valores de harbour en C.
Para enviar valores de C a Harbour, usa:
hb_retc( -1 )

Posted: Mon Jul 17, 2006 4:38 pm
by Antonio Linares
Rafa,

Gustavo está intentando recuperar el valor devuelto desde el PRG por lo que la llamada a hb_par...( -1 ) es correcta. -1 significa que se acceda al valor de retorno.

Gustavo: Tu problema es un problema de uso de cadenas en C. Si la cadena empieza con cero, entonces tienes que recuperar a partir del siguiente byte:

respuesta = hb_parcx( -1 ) + 1;

Posted: Mon Jul 17, 2006 5:18 pm
by goosfancito
Estimado,

Entonces quiere decir que yo deberia luego agregarle el chr( 0 ) al inicio para que la cadena este bien?

Porque entiendo que me devuelve la cadena "pero" el el primer chr( 0 )

es asi?

Gracias.

Posted: Mon Jul 17, 2006 9:23 pm
by Antonio Linares
Gustavo,

En C, tradicionalmente, las cadenas se usan como un grupo de bytes terminados en un cero. De ahí que no debas ponerle un cero al principio, si deseas hacer otras operaciones como cadena.

Usa la cadena desde el siguiente byte, como te he indicado, y luego ten en cuenta que tienes un cero delante.

Posted: Tue Jul 18, 2006 7:32 am
by thefull
Antonio Linares wrote:Rafa,

Gustavo está intentando recuperar el valor devuelto desde el PRG por lo que la llamada a hb_par...( -1 ) es correcta. -1 significa que se acceda al valor de retorno.

Gustavo: Tu problema es un problema de uso de cadenas en C. Si la cadena empieza con cero, entonces tienes que recuperar a partir del siguiente byte:

respuesta = hb_parcx( -1 ) + 1;
Correcto Antonio, no habia entendido bien el problema.
Creia que estaba intentando recuperar un valor pasado a la funcion,
no que deberia de cogerlo despues de llamar desde C a PRG y recuperar dicho valor en la mismo rutina de C.