Ayuda en programa

Ayuda en programa

Postby colthop » Fri May 13, 2016 6:00 am

Hola a todos:

Hoy os pido, ayuda sobre todo a los master, por un motivo no relacionado con FiveWin sino con C++:

Estoy haciendo un programa en el cual quiero hacer una cosa que en FiveWin lo hace muy sencillo y en C++ no se como se hace y si es posible hacerlo.

Me explico:

Yo con FiveWin hago

a = "función()"
&a

y lo que resulta es que ejecuta "función()". Esto no se como se hace y si es posible hacerlo en C++, es una cosa parecida a lo que hace el GET cuando ponemos la clausula VALID con una función, que ejecuta esa función.

Un saludo y gracias.

Carlos
Colt Hop ED, S.L.
Carlos Blas Fernández Domínguez
Tlfo: 645847093
E-Mail: carlos@colthop.es

Nunca se termina de aprender, por eso necesito siempre ayuda.
colthop
 
Posts: 505
Joined: Sat Apr 22, 2006 9:09 am
Location: Madrid - España

Re: Ayuda en programa

Postby Carlos Mora » Fri May 13, 2016 7:01 am

Hola Carlos,

hasta donde sé, eso no es posible. C++ es un lenguaje compilado, puro, donde los simbolos y variable se reemplazan por su dirección en tiempo de compilación.
De la misma forma que no existen PUBLICs ni PRIVATEs, me temo que eso no sería viable.
Desconozco que problema quieres resolver con una macro, tal vez puedas usar metodos virtuales si estas haciendo POO.

Un saludo
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Carlos Mora
 
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Re: Ayuda en programa

Postby Antonio Linares » Fri May 13, 2016 7:51 am

El nombre de una función en C es su puntero. Es decir si tenemos la función Test(), Test es la dirección de Test()
y por lo tanto se puede "saltar" a ella y ejecutarla, dada su puntero.

En realidad la diferencia entre C++ y C, es un array "invisible" (lpVtbl) que C++ construye de punteros a funciones
(que se convierten en métodos al recibir automaticamente Self como primer parámetro).

Clipper 5 heredó mucho esta filosofía de C++, y en los RDDs, en los GT, etc. usó esta técnica de arrays de punteros
a funciones. Es la forma en que se puede simular el C++ usando solo C. Harbour lo usa igualmente.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Ayuda en programa

Postby colthop » Fri May 13, 2016 8:35 am

Hola a todos:

Gracias por vuestras respuestas.

Antonio no se si me estas diciendo que se puede o que no se puede.

Si Harbour y Clipper se realizaron C tendrán una manera de realizar la operativa y si es así podrías orientarme con algún ejemplo.

Un saludo

Carlos
Colt Hop ED, S.L.
Carlos Blas Fernández Domínguez
Tlfo: 645847093
E-Mail: carlos@colthop.es

Nunca se termina de aprender, por eso necesito siempre ayuda.
colthop
 
Posts: 505
Joined: Sat Apr 22, 2006 9:09 am
Location: Madrid - España

Re: Ayuda en programa

Postby Antonio Linares » Fri May 13, 2016 9:11 am

Carlos,

Claro que se puede. Aqui tienes un ejemplo:

Code: Select all  Expand view
#include "FiveWin.ch"

function Main()

   Test()

return nil

#pragma BEGINDUMP

#include <windows.h>
#include <hbapi.h>

static void Test( void )
{
   MessageBox( 0, "dentro de Test()", "ok", 0 );
}

typedef void ( * PFUNC ) ( void );

HB_FUNC( TEST )
{
   PFUNC pFunction = Test;

   pFunction();
}

#pragma ENDDUMP  
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Ayuda en programa

Postby carlos vargas » Fri May 13, 2016 5:40 pm

Son babosadas, el que sabe, sabe.
:-)
estas son las explicaciones que vale siempre tener a mano, a guardar post.

gracias antonio.

salu2
carlos vargas
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1683
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Ayuda en programa

Postby sysctrl2 » Fri May 13, 2016 7:40 pm

Maestro !
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
sysctrl2
 
Posts: 951
Joined: Mon Feb 05, 2007 7:15 pm

Re: Ayuda en programa

Postby colthop » Mon May 23, 2016 7:34 am

Hola Antonio:

Ante todo disculpa por la tardanza pero la semana pasada no pude hacer nada sobre este tema:

Y gracias por tu respuesta el que sabe, sabe.

Solo dos preguntas:

1.- En tu ejemplo en el Main() pones solo Test(), como yo expuse era que una variable valiese "Test()" y después siempre pongo & y la variable, para ejecutar esa variable por lo que si modifico tu código a:

Code: Select all  Expand view

#include "FiveWin.ch"

function Main()

   cVar = "Test()"
   &cVar

return nil

#pragma BEGINDUMP

#include <windows.h>
#include <hbapi.h>

static void Test( void )
{
   MessageBox( 0, "dentro de Test()", "ok", 0 );
}

typedef void ( * PFUNC ) ( void );

HB_FUNC( TEST )
{
   PFUNC pFunction = Test;

   pFunction();
}

#pragma ENDDUMP
 


¿Esto funcionaría?. Pero lo utilizo para mas cosas como la declaración de variables o para quitar OBJETOS de pantalla. Por ejemplo:

Code: Select all  Expand view

PROCEDURE QuiBotPan(zOpc,zOpc1)
zNum = zOpc
do While .T.
  do case
    case zNum > 9
      zVar = "xPul"  + str(zNum,2,0)
    otherwise
      zVar = "xPul0" + str(zNum,1,0)
  endcase
  &zVar:End()
  zNum = zNum + 1
  if zNum = zOpc1+1
    exit
  endif
enddo
RETURN (NIL)


Que lo que hace es quitar botones desde un numero a otro. Aquí también funcionaría.

2.- En tu ejemplo usas una función de harbour "HB_FUNC" para llamar a la otra y usas "hbapi.h" como expresé yo lo quiero hacer en C++, tendría que incluir esta .h para poder hacerlo o lo tendría que hacer de otra manera.

Un saludo y gracias de nuevo.

Carlos
Colt Hop ED, S.L.
Carlos Blas Fernández Domínguez
Tlfo: 645847093
E-Mail: carlos@colthop.es

Nunca se termina de aprender, por eso necesito siempre ayuda.
colthop
 
Posts: 505
Joined: Sat Apr 22, 2006 9:09 am
Location: Madrid - España

Re: Ayuda en programa

Postby Antonio Linares » Mon May 23, 2016 4:17 pm

Carlos,

Necesito que me muestres un ejemplo en C++ de lo que estás haciendo o de lo que quieres hacer
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Ayuda en programa

Postby colthop » Tue May 24, 2016 6:14 am

Hola Antonio:

El ejemplo puede ser lo mismo que te expuse en el otro post pero en C++, algo asi:

Code: Select all  Expand view

....
void  QuiBotPan(int, int)
....

Main()
....
QuiBotPan(2, 6)
....


void  QuiBotPan(int zOpc, int zOpc1)
{
char* zVar;
zNum = zOpc;
do  
{
  if (zNum > 9)
    {
      zVarC = "xPul";
      itoc(zNum,zNumC,2);
    }
  else
    {
      zVarC = "xPul0";
      itoc(zNum,zNumC,1);
    }
  strcpy(&zVar[ strlen(zVarC) ], zNumC);
  CloseWindow(&zVar);
  zNum++
}
While zNum < zOpc1+1;
}


Imaginemos una Ventana Principal en donde tengamos otras 10 llamadas secuencialmente desde xPul01 a xPul10. Esta función debería cerrar las ventanas creadas desde xPul02 a xPul06, con la función "CloseWindow(&zVar)".

Que es básicamente lo que quiero que yo creo una variable ("zVar")con unos valores ("xPul02", "xPul03", "xPul04", "xPul05" y "xPul06") y después mediante una opción ("&" o lo que sea) el programa reemplace en la función lo que vale la variable ("CloseWindow(xPul02)", "CloseWindow(xPul03)", "CloseWindow(xPul04)", "CloseWindow(xPul05)", "CloseWindow(xPul06)").

Un saludo

Carlos
Colt Hop ED, S.L.
Carlos Blas Fernández Domínguez
Tlfo: 645847093
E-Mail: carlos@colthop.es

Nunca se termina de aprender, por eso necesito siempre ayuda.
colthop
 
Posts: 505
Joined: Sat Apr 22, 2006 9:09 am
Location: Madrid - España

Re: Ayuda en programa

Postby Antonio Linares » Tue May 24, 2016 8:22 am

Carlos,

Tendrias que mantener un array y recorrer el array cerrando las ventanas.

Por los nombres con comillas no puedes hacerlo. C++ no mantiene una tabla de símbolos como en Harbour.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Ayuda en programa

Postby colthop » Tue May 24, 2016 8:38 am

Hola Antonio:

Gracias por tu orientación, esto funcionaría con el primer caso crear un array con "test()" y luego poner:

array [1];

Ejecutaría "test()"

Un saludo

Y gracias.

Carlos
Colt Hop ED, S.L.
Carlos Blas Fernández Domínguez
Tlfo: 645847093
E-Mail: carlos@colthop.es

Nunca se termina de aprender, por eso necesito siempre ayuda.
colthop
 
Posts: 505
Joined: Sat Apr 22, 2006 9:09 am
Location: Madrid - España

Re: Ayuda en programa

Postby Antonio Linares » Tue May 24, 2016 9:09 am

Puedes declarar un array del tipo que quieras, por ejemplo "punteros a funciones" y luego
usar esos valores para lo que necesites.

Tienes algo ya funcionando que pueda probar aqui ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Ayuda en programa

Postby colthop » Tue May 24, 2016 9:15 am

Hola Antonio:

Todavía no estoy buscando todo lo que necesito y no tengo nada enlazado.

Pero ya me has orientado y si necesito mas ayuda te la pediré.

Gracias por todo.

Un saludo

Calros
Colt Hop ED, S.L.
Carlos Blas Fernández Domínguez
Tlfo: 645847093
E-Mail: carlos@colthop.es

Nunca se termina de aprender, por eso necesito siempre ayuda.
colthop
 
Posts: 505
Joined: Sat Apr 22, 2006 9:09 am
Location: Madrid - España

Re: Ayuda en programa

Postby Antonio Linares » Tue May 24, 2016 9:39 am

Carlos,

En el 2012 y por probar, comencé a escribir una librería en C++ a la que llamé FiveCpp
que simulaba un poco el comportamiento de FWH pero desarrollada en C++.

Tal vez pueda interesarte. Aun no se con certeza lo que necesitas :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 58 guests