Page 1 of 1

Conversion a C

Posted: Mon Sep 18, 2006 12:12 pm
by Carles
Hola,

Haber quien me hecha un cable con esta conversion a C

Me gustaria hacer esto:

Code: Select all

FUNCTION Test( cData )

  Local nError := 0

   MiFuncionC( cData, @nError )

RETURN nError
Yo creo q seria algo asi, pero me falta definir nError y como paso el paramtro por referencia:

Code: Select all

#pragma BEGINDUMP 

#include "windows.h" 
#include "hbapi.h" 

LPWSTR AnsiToWide( LPSTR );

HB_FUNC  ( TEST )
{
    LPWSTR cData = AnsiToWide( hb_parc( 1 ) );

    MiFuncionC( cData, nError ???)      <- Como defino nError ( p.e. nError := 0, y lo paso por referencia )

   retnl( nError )

}
#pragma ENDDUMP
Gracias atodos.

Posted: Mon Sep 18, 2006 1:18 pm
by jlcapel
Carles,

Quizás esto te pueda ayudar, aunque no estoy muy seguro.

http://www.capelblog.com/?p=75

Saludos,
José Luis Capel

Posted: Mon Sep 18, 2006 4:48 pm
by Antonio Linares
Carles,

Es bastante más simple si lo cambias así:

Code: Select all

FUNCTION Test( cData, nError ) 

   MiFuncionC( cData, @nError ) 

RETURN nError
te sirve ?

Posted: Tue Sep 19, 2006 9:06 am
by Carles
Antonio,

Si me serviria, pero como declaro la variable nError dentro de la funcion y como la paso por referencia ?

Code: Select all

#pragma BEGINDUMP 

#include "windows.h" 
#include "hbapi.h" 

LPWSTR AnsiToWide( LPSTR ); 

HB_FUNC  ( TEST ) 
{ 
    LPWSTR cData = AnsiToWide( hb_parc( 1 ) ); 
    nError = hb_parnl(2) ;               <- Como declaro nError (2º parametro) ?

    MiFuncionC( cData, &nError)      <- Como defino nError por referencia con el & ? 

} 
#pragma ENDDUMP 
Gracias

Posted: Tue Sep 19, 2006 10:02 am
by Antonio Linares
Carles,

Code: Select all

#pragma BEGINDUMP 

#include "windows.h" 
#include "hbapi.h" 

LPWSTR AnsiToWide( LPSTR ); 

HB_FUNC  ( TEST ) 
{ 
    LPWSTR cData = AnsiToWide( hb_parc( 1 ) ); 
    LONG nError = hb_parnl(2) ;

    MiFuncionC( cData, &nError );
 
    hb_stornl( nError, 2 ); 
} 
#pragma ENDDUMP 

Posted: Tue Sep 19, 2006 10:06 am
by Carles
Antonio,

Gracias. Casi lo consigo :-). Voy a probarlo

Posted: Tue Sep 19, 2006 12:40 pm
by Carles
Antonio,

El ejemplo propuesto funciona de maravillas -> gracias.

Ahora necesito crear otro ejemplo, y necesito saber como se declaran las variables. No me gusta tocar las narices y si me dices donde puedo encontrar definiciones, me lo mirare. He intentado mirarme ficheros include, pero la verdad, no se si realmente miro lo correcto. Tambien, donde puedo mirar funciones que devuelven los valors, tipo hb_stornl(), hb_retnl(), ...

Ahora estoy enganchado en definir lo q en un prg seria:

cBuffer := Space(200)
lAccept := .f.


Gracias.

Posted: Tue Sep 19, 2006 6:33 pm
by Antonio Linares
Carles,

> cBuffer := Space(200)

char buffer[ 200 ];

> lAccept := .f.

BOOL bAccept = FALSE;

Revisa el código fuente de Harbour. En el directorio RTL tienes muchos ejemplos.