FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Rutinas en C++ en FHW
Posts: 77
Joined: Wed Jun 28, 2006 06:38 PM
Rutinas en C++ en FHW
Posted: Thu Jul 06, 2006 12:07 AM

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

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Rutinas en C++ en FHW
Posted: Thu Jul 06, 2006 11:01 AM
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:
// 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
Posts: 77
Joined: Wed Jun 28, 2006 06:38 PM
Rutinas en C++ en FHW
Posted: Fri Jul 07, 2006 12:46 AM

Gracias Antonio, funciona perfecto :wink:

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Rutinas en C++ en FHW
Posted: Mon Jul 31, 2006 07:54 PM

Oscar,

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
Posts: 1380
Joined: Fri Oct 14, 2005 01:28 PM
Rutinas en C++ en FHW
Posted: Wed Aug 02, 2006 03:21 PM
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?
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
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Rutinas en C++ en FHW
Posted: Wed Aug 02, 2006 06:16 PM

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
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Rutinas en C++ en FHW
Posted: Thu Aug 03, 2006 06:30 AM

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
Posts: 1380
Joined: Fri Oct 14, 2005 01:28 PM
Rutinas en C++ en FHW
Posted: Thu Aug 03, 2006 11:40 AM

Muchas gracias!, hace mucho que lo esperaba

Resistencia - "Ciudad de las Esculturas"

Chaco - Argentina
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Rutinas en C++ en FHW
Posted: Sat Aug 05, 2006 09:26 PM
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:
// 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
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Rutinas en C++ en FHW
Posted: Sun Aug 06, 2006 04:29 PM

Oscar,

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
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM
Rutinas en C++ en FHW
Posted: Tue Aug 29, 2006 07:50 PM
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:
// 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:

#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
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM
Rutinas en C++ en FHW
Posted: Wed Aug 30, 2006 04:15 PM
Gracias amigo.

Sirvio,

oskar wrote:Gustavo haber si te sirve esto

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


Testc.c
#include <hbapi.h>

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


Testcpp.cpp
#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
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/

Continue the discussion