Funciones en C++

Post Reply
manuramos
Posts: 219
Joined: Mon Dec 26, 2005 7:25 pm
Location: Jerez de la Frontera (Spain)

Funciones en C++

Post 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.
Nos Gusta Programar
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post 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

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

// 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

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 );
}   	

}   
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

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

Antonio Linares
www.fivetechsoft.com
manuramos
Posts: 219
Joined: Mon Dec 26, 2005 7:25 pm
Location: Jerez de la Frontera (Spain)

Post by manuramos »

Gracias Antonio. Ahora mismo me pongo manos a la obra.
Nos Gusta Programar
manuramos
Posts: 219
Joined: Mon Dec 26, 2005 7:25 pm
Location: Jerez de la Frontera (Spain)

Post 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
Nos Gusta Programar
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

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

Antonio Linares
www.fivetechsoft.com
manuramos
Posts: 219
Joined: Mon Dec 26, 2005 7:25 pm
Location: Jerez de la Frontera (Spain)

Post by manuramos »

Pues muchas gracias Antonio. Todo aclarado.
Nos Gusta Programar
manuramos
Posts: 219
Joined: Mon Dec 26, 2005 7:25 pm
Location: Jerez de la Frontera (Spain)

Post 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?
Nos Gusta Programar
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

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

Antonio Linares
www.fivetechsoft.com
manuramos
Posts: 219
Joined: Mon Dec 26, 2005 7:25 pm
Location: Jerez de la Frontera (Spain)

Post 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.
Nos Gusta Programar
Post Reply