hb_parcx( -1 ) como funciona?

hb_parcx( -1 ) como funciona?

Postby goosfancito » Mon Jul 17, 2006 1:35 pm

Amigos,

Code: Select all  Expand view
      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  Expand view
comando:= chr( 0 ) + "anulado + chr( 10 ) + chr( 9 )


El problema es que:
Code: Select all  Expand view
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.
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 thefull » Mon Jul 17, 2006 2:51 pm

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

Postby Antonio Linares » Mon Jul 17, 2006 4:38 pm

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

Postby goosfancito » Mon Jul 17, 2006 5:18 pm

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.
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 » Mon Jul 17, 2006 9:23 pm

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

Postby thefull » Tue Jul 18, 2006 7:32 am

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__)
User avatar
thefull
 
Posts: 730
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 34 guests