Foros del Web » Programación para mayores de 30 ;) » .NET »

Script (crear funciones en tiempo de ejecución)

Estas en el tema de Script (crear funciones en tiempo de ejecución) en el foro de .NET en Foros del Web. Güen día Gente, [INTRODUCCION] Estoy programando un software en VB.Net que lee archivos de texto plano y a partir de eso crea macros y las ...
  #1 (permalink)  
Antiguo 16/06/2011, 18:07
Avatar de Vanchi
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: Io voy donde vo' vai... Ca'eza
Mensajes: 1.111
Antigüedad: 17 años, 3 meses
Puntos: 138
Script (crear funciones en tiempo de ejecución)

Güen día Gente,


[INTRODUCCION]
Estoy programando un software en VB.Net que lee archivos de texto plano y a partir de eso crea macros y las ejecuta.

Sería una especie de "lenguaje intérprete".

Ej.
Supongamos que el archivo a leer es la rutina para calcular el área de un cuadrado.

Cita:
Iniciado por Ejemplo simplón
b=? 'Base del cuadrado
h=? 'Altura del cuadrado
Area = b*h
Con esos datos la máquina genera una macro que a partir de pedir los datos b y h calcula el área.

Hasta allí todo bien.

El problema fue cuando agregué Tablas.

Supongamos que en ese cálculo tonto del área del cuadrado, esta no puede tomar cualquier valor, sino solo uno que esté en una tabla en un archivo de texto plano.

Ej:
Cita:
Iniciado por Ejemplo de tabla
2
5
7.2
De modo que si el área me dio que era 3.823 en vez de darme por resultado ese 3.823 me de 5 que es el número más próximo de la tabla.
(Esto no es porque las matemáticas fallen, sino porque uno calcula el área mínima y luego tendría que buscar el elemento comercial que más se ajuste a las necesidades)

Esto quise hacerlo también con otro script, pero hasta ahora no lo he logrado.
[/INTRODUCCIÓN]

Bueno, luego de esta larga (e innecesaria) introducción viene la pregunta (la hice (a la intro) para ponerlos en el tema a ver si me sugieren otra cosa).

Hasta ahora los scripts los creo agregando la referencia MSScriptControl (que es del viejo VB6). (Mediante .AddCode)

PREGUTA: ¿Hay alguna forma más acorde al VB.Net de crear funciones en tiempo de ejecución?

Estoy teniendo muchos inconvenientes con ese MSScriptControl... y tal vez en VB.Net sea más simple. (o más transparente, o más veloz, o más... etc)

Saludos y gracias
__________________
Según recientes estudios científicos, los 3 más grandes descubrimientos de la humanidad son: El fuego, la rueda y la minifalda.
Yo personalmente no le encuentro mucha utilidad a los 2 primeros.

Última edición por Vanchi; 16/06/2011 a las 18:13
  #2 (permalink)  
Antiguo 23/06/2011, 17:41
Avatar de Vanchi
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: Io voy donde vo' vai... Ca'eza
Mensajes: 1.111
Antigüedad: 17 años, 3 meses
Puntos: 138
Respuesta: Script (crear funciones en tiempo de ejecución)

Güen día gente,

Me olvidé de comentarles.

Finalmente lo solucioné de otra manera:

Mi programa automáticamente crea un código fuente a partir del archivo de texto plano y luego lo compila y corre ese nuevo programa.

Ventajas:
Ahora tengo toda la potencia del VB.Net y solo algunas partes como tenía antes (con el control MSScriptControl)
El código fuente queda... de modo que si hay un error es mucho más fácil rastrear
Al quedar compilado, la ejecución es muchísimo más veloz... Solo tarda un poco la primer vez que se ejecuta el programa (cuando compila) luego la velocidad es increíblemente mayor.

Desventajas:
Antes creaba funciones on the fly por lo que podía devolver valores.
No encontré la forma de hacer que Sub Main se transforme en Function Main... Por lo que la ejecución de la "macro" (ahora como programa) no retorna ningún valor... Sin embargo esto lo solucioné fácilmente a partir de un dato reporte en archivo que hago que el programa que mi programa crea, escriba (no, programa no está escrito 2 veces por error. Está bien escrito así)

Saludos.

PD: Las herramientas que me fueron de suma utilidad es:
Código:
Dim provider As CodeDomProvider = Nothing
...
Dim cr As CompilerResults = provider.CompileAssemblyFromFile(cp, sourceName)
__________________
Según recientes estudios científicos, los 3 más grandes descubrimientos de la humanidad son: El fuego, la rueda y la minifalda.
Yo personalmente no le encuentro mucha utilidad a los 2 primeros.

Etiquetas: funciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:29.