Page 1 of 1

Funciones en C++

PostPosted: Sun Aug 20, 2006 8:52 am
by manuramos
Me gustaría hacer alguna función en Borland C++, para probar. Mi pregunta es: ¿basta con escribir un fichero "----.c" y compilar con BRC32 para obtener un OBJ válido, o si tengo que hacer algo especial entre medias?

Gracias.

PostPosted: Sun Aug 20, 2006 10:59 am
by Antonio Linares
Manu,

Aqui tienes un ejemplo para Clipper. Ojo, tienes que compilar con bcc.exe que es para 16 bits. En 32 bits es más simple: http://fivetechsoft.com/forums/viewtopi ... testivalue

go.bat
Code: Select all  Expand view
c:\clipper5\bin\clipper main /n
c:\bc5\bin\bcc -c -ml -Ic:\clipper5\include test.cpp
SET LIB=c:\clipper5\lib;c:\bc5\lib
blinker fi main.obj, test.obj lib clipper, extend, dbfntx, terminal

main.prg
Code: Select all  Expand view
// Usando C++ con Clipper
// ejemplo desarrollado por FiveTech Software

function Main()

   local oTest := Test() // Creamos un objeto en C++

   ? Test_IVal( oTest )  // Visualizamos un dato del objeto en C++
   
return nil

test.cpp
Code: Select all  Expand view
class Sample
{
   public:
      int iValue;
      Sample();
      void * operator new( unsigned long ulSize );
      void operator delete( void * );
};

Sample::Sample()
{
   iValue = 123;
}   

extern "C" {
   void * _xgrab( unsigned long );
   void _xfree( void * );
}

void * Sample::operator new( unsigned long ulSize )
{
   return _xgrab( ulSize );
}         

void Sample::operator delete( void * p )
{
   _xfree( p );
}         

extern "C" {

#include <extend.api>

CLIPPER TEST()
{
   _retnl( ( unsigned long ) new Sample() );
}

CLIPPER TEST_IVAL()
{
   _retnl( ( ( Sample * ) _parnl( 1 ) )->iValue );
}      

}   

PostPosted: Sun Aug 20, 2006 11:10 am
by Antonio Linares
Manu,

Si te refieres a sólo escribir una función, revisa source\winapi\*.c

Para compilar bcc.exe -c -ml -I<path_a_includes> <fichero.c>

PostPosted: Sun Aug 20, 2006 4:51 pm
by manuramos
Gracias Antonio. Ahora mismo me pongo manos a la obra.

PostPosted: Sun Aug 20, 2006 5:26 pm
by manuramos
Bueno, aunque leyendo mejor lo que me has escrito, me han entrado algunas dudas. Mi intención es escribir algunas funciones sencillas en C++ para utilizarlas en diversos programas, a modo de librería.

Según veo en Source\WinApi\...c

¿Esto seviría?

#include <WinTen.h>
#include <Windows.h>
#include <ClipApi.h>

CLIPPER lEsPar( PARAMS )
{
_retl((_parnl( 1 )%2 == 0);
}

Guardar en Test.c

Después compilar con: bcc.exe -c -ml -IC:\CLIPPER5\INCLUDE Test.c

Finalmente linkar el objeto (Test.obj) junto con los demás objetos de mi programa. ¿Sería correcto?

En caso afirmativo, para 32 bit, para cuando me pase a xHarbour, sería lo mismo pero con BCC32?

Por ultimo, he visto en algunos ficheros de c algo como esto: _param( 3, -1 ). Otras veces, en vez de -1 aparece un entero positivo que deduzco es el indice de un array, pero -1 no he logrado averiguar que significa.

Gracias. Un saludo

PostPosted: Sun Aug 20, 2006 8:11 pm
by Antonio Linares
Manu,

>
Después compilar con: bcc.exe -c -ml -IC:\CLIPPER5\INCLUDE Test.c

Finalmente linkar el objeto (Test.obj) junto con los demás objetos de mi programa. ¿Sería correcto?
>



>
En caso afirmativo, para 32 bit, para cuando me pase a xHarbour, sería lo mismo pero con BCC32?
>

Sí. En 32 bits no se usa -ml

>
Por ultimo, he visto en algunos ficheros de c algo como esto: _param( 3, -1 ). Otras veces, en vez de -1 aparece un entero positivo que deduzco es el indice de un array, pero -1 no he logrado averiguar que significa.
>

-1 es equivalente a 0xFFFF (hexadecimal) que significa "de todos los tipos" en Clipper. Es decir, queremos un parámetro, sea del tipo que sea. Variando ese valor se puede escoger un cierto tipo de valores.

entero positivo es un tipo de valor, no "de todos los tipos".

PostPosted: Mon Aug 21, 2006 3:41 pm
by manuramos
Pues muchas gracias Antonio. Todo aclarado.

PostPosted: Tue Aug 22, 2006 5:59 pm
by manuramos
Antonio, tengo un último problema. En los Borland c++ que he bajado, incluido el de FiveTechSoft, no se incluye BCC.EXE, sólo BCC32.exe funcionará a ¿16 bits?

PostPosted: Tue Aug 22, 2006 6:43 pm
by Antonio Linares
Manu,

La última versión de Borland que incorpora el compilador de 16 bits es la 5, no la 5.5. Tienes que localizar la 5 ó una anterior.

bcc32.exe no sirve para compilar a 16 bits.

PostPosted: Tue Aug 22, 2006 7:39 pm
by manuramos
Una últiuma cosa y ya no te molesto más con este tema. Estoy intentando compilar a 32 bits mi ejemplo tal que así:

// #include <winten.h>
#include <windows.h>
#include <clipapi.h>

CLIPPER lEsPar( PARAMS )
{
_retl( _parnl( 1 )%2 == 0 ) ;
}

Con el comando: c:\Borland\Bcc55\Bin\Bcc32.exe -c -Ic:\Borland\Bcc55\Include %1.c
Como me dijistes

Y me da los 3 siguientes errores:

Warning W8065 ClipFunc.c 7: Call to function '_parnl' with no prototype in function lEsPar

Warning W8065 ClipFunc.c 7: Call to function '_retl' with no prototype in function lEsPar

Warning W8057 ClipFunc.c 8: Parameter 'params' is never used in function lEsPar

¿Eso es normal o me falta algo?

Muchas gracias. Un saludo.