Rutinas en C++ en FHW

Rutinas en C++ en FHW

Postby alex_cyr » 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...
alex_cyr
 
Posts: 77
Joined: Wed Jun 28, 2006 6:38 pm
Location: Chihuahua

Postby Antonio Linares » 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:
Code: Select all  Expand view  RUN
// 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
User avatar
Antonio Linares
Site Admin
 
Posts: 42127
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby alex_cyr » Fri Jul 07, 2006 12:46 am

Gracias Antonio, funciona perfecto :wink:
alex_cyr
 
Posts: 77
Joined: Wed Jun 28, 2006 6:38 pm
Location: Chihuahua

Postby Antonio Linares » Mon Jul 31, 2006 7: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42127
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby MarioG » Wed Aug 02, 2006 3: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?
Code: Select all  Expand view  RUN
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
MarioG
 
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Postby Antonio Linares » Wed Aug 02, 2006 6: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42127
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Antonio Linares » Thu Aug 03, 2006 6: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42127
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby MarioG » Thu Aug 03, 2006 11:40 am

Muchas gracias!, hace mucho que lo esperaba
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
MarioG
 
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Postby Antonio Linares » Sat Aug 05, 2006 9: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:
Code: Select all  Expand view  RUN
// 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: 42127
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Antonio Linares » Sun Aug 06, 2006 4: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42127
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby goosfancito » Tue Aug 29, 2006 7: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:
Code: Select all  Expand view  RUN
// 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  Expand view  RUN
#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/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Postby goosfancito » Wed Aug 30, 2006 4:15 pm

Gracias amigo.

Sirvio,

_ wrote:Gustavo haber si te sirve esto

Main.prg
Code: Select all  Expand view  RUN
#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  Expand view  RUN
#include <hbapi.h>

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


Testcpp.cpp
Code: Select all  Expand view  RUN
#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/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 66 guests