Rutinas en C++ en FHW

Post Reply
alex_cyr
Posts: 77
Joined: Wed Jun 28, 2006 6:38 pm
Location: Chihuahua

Rutinas en C++ en FHW

Post by alex_cyr »

Que tal tengo una pregunta, puedo poner una rutina en C++ emebebida en mi programa de FWH o tengo que hacer su equivalencia a Borland C, talvez es una pregunta obvia pero no tengo idea de esto gracias...
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Alex,

Puedes usar C++ siempre que llames a Borland C con el parámetro -P para forzar la compilación en C++. Aqui tienes un ejemplo:

Code: Select all

// Using C++ with Harbour 
// sample developed by FiveTech Software

function Main()

   local oTest := Test() // We create a C++ object

   XMSGINFO( TEST_IVALUE( oTest ) ) // We retrieve a C++ object data
   
return nil

#pragma BEGINDUMP

#include <hbapi.h>

class Sample
{
   public:
      int iValue;
      Sample();
};

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

HB_FUNC( TEST )   
{
   Sample * p = new Sample;
   
   hb_retnl( ( unsigned long ) p );
}

HB_FUNC( TEST_IVALUE )
{
   hb_retnl( ( ( Sample * ) hb_parnl( 1 ) )->iValue );
}   

extern "C" 
{
   HB_FUN_MSGINFO( void );
}

HB_FUNC( XMSGINFO )
{
   HB_FUN_MSGINFO();
}   

#pragma ENDDUMP  
regards, saludos

Antonio Linares
www.fivetechsoft.com
alex_cyr
Posts: 77
Joined: Wed Jun 28, 2006 6:38 pm
Location: Chihuahua

Post by alex_cyr »

Gracias Antonio, funciona perfecto :wink:
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

_,

Sólo tienes que cambiar esto en samples\buildh.bat:

%bcdir%\bin\bcc32 -M -c -P @b32.bc
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
MarioG
Posts: 1356
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Post by MarioG »

Disculpen el O.T.; no se nada de C
Se puede leer lo sigiuente de un archivo .rc (si el contenido fuera C), desde nuestros .prg?

Code: Select all

1 VERSIONINFO 
FILEVERSION 2, 52, 25
PRODUCTVERSION 2, 52, 25
{
 BLOCK "StringFileInfo"
 {
  BLOCK "040904E4"
  {
   VALUE "Author", "Ing. Mario González\000"
   VALUE "CompanyName", "Ideas & Desarrollos\000"
   VALUE "FileDescription", "Bancos & Recursos\000"
   VALUE "FileVersion", "rev.2.52.25 (build 07/06)\000"
   VALUE "InternalName", "mgbyr\000"
   VALUE "LegalCopyright", "I&D © 1989-2006\000"
   VALUE "ProductName", "Bancos & Recursos\000"
   VALUE "ProductVersion", "rev.2.52.25 (build 07/06)\000"
   VALUE "OriginalFilename", "mgbyr.exe\000"
  }

 }

 BLOCK "VarFileInfo"
 {
  VALUE "Translation", 2048, 1200
 }

}
gracias
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Mario,

Se hace como se describe en esta página:
http://vcfaq.mvps.org/sdk/3.htm

Vamos a construir un ejemplo.
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 »

Mario,

Aquí está el ejemplo, desarrollado por un buen amigo nuestro y usando un RC desarrollado por nosotros con el editor de recursos de PellesC:

http://hyperupload.com/download/0211476 ... r.zip.html
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
MarioG
Posts: 1356
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Post by MarioG »

Muchas gracias!, hace mucho que lo esperaba
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

En relación a C++, gracias a las nuevas mejoras en Harbour ya es posible mezclar C y C++ libremente. Esta capacidad aún no está implementada en xHarbour.

Aqui tienen un ejemplo de como se usa ahora:

Code: Select all

// Using C++ with Harbour 
// sample developed by FiveTech Software

function Main()

   local oTest := Test() // We create a C++ object

   MsgInfo( TEST_IVALUE( oTest ) ) // We retrieve a C++ object data
   
return nil

#pragma BEGINDUMP

#include <hbapi.h>

class Sample
{
   public:
      int iValue;
      Sample();
};

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

HB_FUNC( TEST )   
{
   Sample * p = new Sample;
   
   hb_retnl( ( unsigned long ) p );
}

HB_FUNC( TEST_IVALUE )
{
   hb_retnl( ( ( Sample * ) hb_parnl( 1 ) )->iValue );
}   

#pragma ENDDUMP  
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 »

_,

Eso es lo que hace ahora Harbour automaticamente, pero con todos los símbolos que genera de todos los PRGs y módulos en C/C++.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
goosfancito
Posts: 1392
Joined: Fri Oct 07, 2005 7:08 pm

Post by goosfancito »

Antonio Linares wrote:Alex,

Puedes usar C++ siempre que llames a Borland C con el parámetro -P para forzar la compilación en C++. Aqui tienes un ejemplo:

Code: Select all

// Using C++ with Harbour 
// sample developed by FiveTech Software

function Main()

   local oTest := Test() // We create a C++ object

   XMSGINFO( TEST_IVALUE( oTest ) ) // We retrieve a C++ object data
   
return nil

#pragma BEGINDUMP

#include <hbapi.h>

class Sample
{
   public:
      int iValue;
      Sample();
};

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

HB_FUNC( TEST )   
{
   Sample * p = new Sample;
   
   hb_retnl( ( unsigned long ) p );
}

HB_FUNC( TEST_IVALUE )
{
   hb_retnl( ( ( Sample * ) hb_parnl( 1 ) )->iValue );
}   

extern "C" 
{
   HB_FUN_MSGINFO( void );
}

HB_FUNC( XMSGINFO )
{
   HB_FUN_MSGINFO();
}   

#pragma ENDDUMP  
Antonio,

Si tengo un simple .cpp con este código:

Code: Select all

#include "hbapi.h"

//------------------------------------------------------------------------------
 
class sample {
   public:
      int iValue;
      sample();
      mostrar();
   };
 
//------------------------------------------------------------------------------
 
sample:: sample() {
   iValue= 123;
   }
 
//------------------------------------------------------------------------------
 
sample:: mostrar() {
 
   // Aca quiero que me retorne el valor "123"
 
   }
 
//------------------------------------------------------------------------------


y quiero desde FWH poder usar esa clase, como hago?

Estoy tratando de entender el mecanismo pero no lo logro ver con las clases. gracias
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
User avatar
goosfancito
Posts: 1392
Joined: Fri Oct 07, 2005 7:08 pm

Post by goosfancito »

Gracias amigo.

Sirvio,
_ wrote:Gustavo haber si te sirve esto

Main.prg

Code: Select all

#include "Fivewin.ch"
/*-----------------------------------------------------------------------------------------------*/
FUNCTION Main()
   LOCAL oCpp
   MsgInfo( "Hola Mundo desde xHarbour" )
   MsgInfo( MENSAJEC() )
   MsgInfo( MENSAJECPP() )
   oCpp := CreateSample()
   ? SampleMostrar( oCpp )
   RETURN NIL
Testc.c

Code: Select all

#include <hbapi.h>

HB_FUNC( MENSAJEC ){
   hb_retc( "hola mundo desde c" );
}
Testcpp.cpp

Code: Select all

#include <hbapi.h>

extern "C" HB_FUNC( MENSAJECPP ){
   hb_retc( "hola mundo desde c++" );
}

class sample {
   public:
      int iValue;
      sample();
      mostrar();
   };

//------------------------------------------------------------------------------

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

//------------------------------------------------------------------------------

sample:: mostrar() {
   return iValue;
   }

extern "C" HB_FUNC( CREATESAMPLE ){
   sample * p = new sample;
   hb_retnl( ( unsigned long ) p );
}

extern "C" HB_FUNC( SAMPLEMOSTRAR ){
   hb_retni( ( ( sample * ) hb_parnl( 1 ) ) -> mostrar() );
}
salu2
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
Post Reply