Ayuda en programa
Ayuda en programa
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
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.
Carlos Blas Fernández Domínguez
Tlfo: 645847093
E-Mail: carlos@colthop.es
Nunca se termina de aprender, por eso necesito siempre ayuda.
-
- Posts: 988
- Joined: Thu Nov 24, 2005 3:01 pm
- Location: Madrid, España
Re: Ayuda en programa
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
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
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Ayuda en programa
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.
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.
Re: Ayuda en programa
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
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.
Carlos Blas Fernández Domínguez
Tlfo: 645847093
E-Mail: carlos@colthop.es
Nunca se termina de aprender, por eso necesito siempre ayuda.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Ayuda en programa
Carlos,
Claro que se puede. Aqui tienes un ejemplo:
Claro que se puede. Aqui tienes un ejemplo:
Code: Select all
#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
- carlos vargas
- Posts: 1421
- Joined: Tue Oct 11, 2005 5:01 pm
- Location: Nicaragua
Re: Ayuda en programa
Son babosadas, el que sabe, sabe.
estas son las explicaciones que vale siempre tener a mano, a guardar post.
gracias antonio.
salu2
carlos vargas
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)
Carlos Vargas
Desde Managua, Nicaragua (CA)
Re: Ayuda en programa
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:
¿Esto funcionaría?. Pero lo utilizo para mas cosas como la declaración de variables o para quitar OBJETOS de pantalla. Por ejemplo:
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
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
#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
Code: Select all
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)
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.
Carlos Blas Fernández Domínguez
Tlfo: 645847093
E-Mail: carlos@colthop.es
Nunca se termina de aprender, por eso necesito siempre ayuda.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Ayuda en programa
Carlos,
Necesito que me muestres un ejemplo en C++ de lo que estás haciendo o de lo que quieres hacer
Necesito que me muestres un ejemplo en C++ de lo que estás haciendo o de lo que quieres hacer
Re: Ayuda en programa
Hola Antonio:
El ejemplo puede ser lo mismo que te expuse en el otro post pero en C++, algo asi:
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
El ejemplo puede ser lo mismo que te expuse en el otro post pero en C++, algo asi:
Code: Select all
....
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;
}
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.
Carlos Blas Fernández Domínguez
Tlfo: 645847093
E-Mail: carlos@colthop.es
Nunca se termina de aprender, por eso necesito siempre ayuda.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Ayuda en programa
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.
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.
Re: Ayuda en programa
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
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.
Carlos Blas Fernández Domínguez
Tlfo: 645847093
E-Mail: carlos@colthop.es
Nunca se termina de aprender, por eso necesito siempre ayuda.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Ayuda en programa
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 ?
usar esos valores para lo que necesites.
Tienes algo ya funcionando que pueda probar aqui ?
Re: Ayuda en programa
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
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.
Carlos Blas Fernández Domínguez
Tlfo: 645847093
E-Mail: carlos@colthop.es
Nunca se termina de aprender, por eso necesito siempre ayuda.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Ayuda en programa
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
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