hb_parcx( -1 ) como funciona?

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

hb_parcx( -1 ) como funciona?

Post 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.
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
thefull
Posts: 720
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona
Contact:

Post 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 )
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post 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;
regards, saludos

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

Post 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.
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,

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.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
thefull
Posts: 720
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona
Contact:

Post 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.
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
Post Reply