Funciones en C++

Funciones en C++

Postby manuramos » Sun Aug 20, 2006 8:52 am

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
manuramos
 
Posts: 219
Joined: Mon Dec 26, 2005 7:25 pm
Location: Jerez de la Frontera (Spain)

Postby Antonio Linares » Sun Aug 20, 2006 10:59 am

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

}   
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 Antonio Linares » Sun Aug 20, 2006 11:10 am

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

Postby manuramos » Sun Aug 20, 2006 4:51 pm

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)

Postby manuramos » Sun Aug 20, 2006 5:26 pm

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
manuramos
 
Posts: 219
Joined: Mon Dec 26, 2005 7:25 pm
Location: Jerez de la Frontera (Spain)

Postby Antonio Linares » Sun Aug 20, 2006 8:11 pm

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

Postby manuramos » Mon Aug 21, 2006 3:41 pm

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)

Postby manuramos » Tue Aug 22, 2006 5:59 pm

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
manuramos
 
Posts: 219
Joined: Mon Dec 26, 2005 7:25 pm
Location: Jerez de la Frontera (Spain)

Postby Antonio Linares » Tue Aug 22, 2006 6:43 pm

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

Postby manuramos » Tue Aug 22, 2006 7:39 pm

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
manuramos
 
Posts: 219
Joined: Mon Dec 26, 2005 7:25 pm
Location: Jerez de la Frontera (Spain)


Return to FiveWin para CA-Clipper

Who is online

Users browsing this forum: No registered users and 4 guests