|
Página 1 de 1
|
Eval, Ejecutar Codigo Gambas?
Autor |
Mensaje |
NidoDeCuervos
Usuario
Registrado: May 2010
Mensajes: 7
Edad: 43
|
Eval, Ejecutar Codigo Gambas?
Hola,
Estoy trabajando con una pequeña aplicación y me gustaría añadirle algo parecido a 'scripting', pensé en utilizar la función eval
para evaluar expresiones de gambas introducidas por el usuario sin embargo, seguramente debido a mi poca experiencia con gambas me encuentro con algunos problemas, quizás porque usar eval no sea la solución correcta...
Para probar cree un textarea que contiene en su texto una única linea tal que así:
App.sayHello()
En un botón añado el siguiente código:
eval(FMain.textarea1.text)
Esto funciona correctamente, es decir, doy click al botón, se evalua el texto del textarea y mi tira el mensaje de hola mundo, peeeero en el momento en que añado una linea extra al textarea este deja de funcionar, adicionalmente no veo que se puedan utilizar código gambas normalmente dentro de un eval, por ejemplo usar un Dim me resulta en un error de Dim no esperado.
El caso es que me gustaría que el usuario pudiese interactuar con los métodos y funciones de la aplicación mediante algún lenguaje, ya sea gambas, perl, o lo que sea, y no se exactamente si usar eval es una solución para esto, si se puede hacer, o por donde podría empezar.
Gracias por adelantado, un saludo.
|
#1 Miercoles, 26 May 2010, 17:00 |
|
|
Ayortano
|
Re: Eval, Ejecutar Codigo Gambas?
Hola!. Pues mira, yo la función Eval la uso principalmente para plugins, sólo que a veces.
Aún así te recomiendo que uses clases. Que tus usuarios programen clases y que tu programa las asimile.
O también otra cosa que se me ocurre, es que el problema se trate de sintaxis. Imagínate que tienes esto:
$stringReal = "Dim kill as string\kill = "hola""
eval($stringReal)
¿Qué podría pasar? Comillas dentro de comillas. Ergo, gambas lo interpretará como código, y el Dim está justo después que otras cosas cuando declarar una variable es lo primero que se debe hacer, para proceder a trabajar con ella u otras cosas. Por eso creo que lo más justo es hacer clases e importarlas.
Ojo, no estoy muy documentado sobre Eval, apenas lo uso, así que quizás si te responde otro tenga una respuesta más completa.
|
#2 Miercoles, 26 May 2010, 20:32 |
|
|
NidoDeCuervos
Usuario
Registrado: May 2010
Mensajes: 7
Edad: 43
|
Re: Eval, Ejecutar Codigo Gambas?
Hola, gracias por responder.
El código que mando al eval cuando cuando lo hago explotar es tal como así:
App.sayHello()
App.sayHello()
Lo mismo que en el ejemplo que si funciona, pero dos lineas, entiendo que eval solo puede ejecutar una expresión a la vez.
La solución que me dices de programar clases si no he entendido mal a lo que te refieres, haría falta reiniciar la aplicación para que funcionase, y yo quiero que el código que quieran ejecutar lo tecleen desde la aplicación misma los usuarios.
Lo que quiero es integrar en la aplicación algún tipo de lenguaje con el que los usuarios puedan interactuar con el programa, así, por ejemplo pueden crear un script introduciendo código en gambas mas o menos así (me lo invento):
if App.getNumWorkspaces() = 0 then
App.AddEmptyWorkspace()
endif
Luego eso desde la aplicación y sin reiniciar lo asignan a una tecla o a un elemento del menu y lo ejecutan cuando quieren.
Pensé que eval iría perfecto si permitía ejecutar de todo, por ejemplo estructuras if while.... pero parece que no... me imagino que quizás el sistema bueno sea utilizar sockets, o quizás algún tipo de comunicación con un script (por ejemplo perl) utilizando la entrada/salida standard, que si bien se me ocurre mas o menos como podría funcionar me parece una opción mas complicada y laboriosa que la que tenía pensada de entrada.
En fin, si a alguien se le ocurre alguna manera sencilla de interactuar desde algún lenguaje de script con una aplicación gambas o se le ocurre por donde podría empezar lo agradeceré, si no supongo que tirare hacia sockets o comunicación por stdin/stdout
Nota: aun que estoy en gambas 3 lo acabo de probar en gambas 2 y el problema es exactamente el mismo, código del ejemplo que acabo de picar:
PUBLIC SUB Button1_Click()
Eval(TextArea1.Text)
END
Si Textarea1.Text contiene mas de una linea no funciona.
Saludos!
última edición por NidoDeCuervos el Miercoles, 26 May 2010, 21:17; editado 2 veces
|
#3 Miercoles, 26 May 2010, 21:06 |
|
|
Ayortano
|
Re: Eval, Ejecutar Codigo Gambas?
Voy a pensar si hay alguna forma menos complicada. Hasta luego
|
#4 Miercoles, 26 May 2010, 22:25 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
Re: Eval, Ejecutar Codigo Gambas?
Se me ocurre que podrías recorrer cada línea del textbox con un bucle for..next y evaluar cada línea dentro del bucle. Crea un array de cadenas separadas por el carácter de final de línea "\n". Lo que desconozco es si de alguna forma se evalúan las expresiones dentro del mismo contexto.
Ya digo que no lo he probado, y no sé si funcionará. Ya nos contarás.
Saludos
=================== Jesús Guardón
Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".
"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
|
#5 Jueves, 27 May 2010, 20:37 |
|
|
NidoDeCuervos
Usuario
Registrado: May 2010
Mensajes: 7
Edad: 43
|
Re: Eval, Ejecutar Codigo Gambas?
Hola, gracias por responder, luego lo probare, pero me temo que si bien esto funcionara cuando el código no contenga estructuras, no lo hará cuando el código contenga condiciones o bucles, ya que por ejemplo le estaríamos diciendo que ejecutase:
If a=1 then
y nada mas, aún así, luego lo probaré y cuento que tal.
Saludos
|
#6 Viernes, 28 May 2010, 17:24 |
|
|
NidoDeCuervos
Usuario
Registrado: May 2010
Mensajes: 7
Edad: 43
|
Re: Eval, Ejecutar Codigo Gambas?
Confirmado, un declaración mediante DIM hace petar el eval, cualquier linea vacía en el texto también lo hará petar, y por lo general lo hará petar cualquier cosa que no sea una expresión, eval no parece ser lo adecuado en este caso.
Empezaré a pelearme con algún sistema para interactuar entre gambas y algún otro lenguaje de scripting, seguramente PHP o perl vía la entrada/salida del proceso, si consigo algo útil lo haré saber por si a alguien mas le es de utilidad.
Saludos
|
#7 Viernes, 28 May 2010, 20:26 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|