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...
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...
// 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 ENDDUMPGracias Antonio, funciona perfecto ![]()
Oscar,
S贸lo tienes que cambiar esto en samples\buildh.bat:
%bcdir%\bin\bcc32 -M -c -P @b32.bc
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
}
}Mario,
Se hace como se describe en esta p谩gina:
http://vcfaq.mvps.org/sdk/3.htm
Vamos a construir un ejemplo.
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:
Muchas gracias!, hace mucho que lo esperaba
// 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 ENDDUMPOscar,
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++.
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
#include "hbapi.h"
//------------------------------------------------------------------------------
class sample {
public:
int iValue;
sample();
mostrar();
};
//------------------------------------------------------------------------------
sample:: sample() {
iValue= 123;
}
//------------------------------------------------------------------------------
sample:: mostrar() {
// Aca quiero que me retorne el valor "123"
}
//------------------------------------------------------------------------------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