bandera and id are variables declared in a vb standard module in my project
arreglo it is an array declared in a vb standard module in my project
valvula is a function declared in a vb standard module in my project
iteraciones it is a "dictionary of" declared in a vb standard module in my project
I would like to know if it is possible to storage this code in a string and compile and execute that string in a runtime mode?
------------------------------------------------------------------------------------------------------------------------------
My first option was to use codecom
Thats way I tried with scripting in vb.net (using msscriptcontrol) with this example:
Option Strict OffOption Explicit OnImports System.Collections.GenericPublic Class Form1 Inherits System.Windows.Forms.Form Dim VBScript As MSScriptControl.ScriptControl Public valor As Double Public VBCode As String Public otro(2) As Double Public nuevo As New Dictionary(Of Integer, nodo) Public prueba As New nodo Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command1.Click On Error GoTo line1 VBScript.AddCode(VBCode) Exit Subline1: MsgBox(Err.Number & Err.Description, MsgBoxStyle.Critical, "error") Err.Clear() End Sub Private Sub Form1_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load Dim prueba As New nodo otro(0) = 0 prueba.uno = 1 prueba.dos = 1 nuevo.Add(1, prueba) VBCode = "form1.otro = form1.valvula(1,2,3)" & vbCr & _"form1.valor = form1.funcion(13)" & vbCr & _ "MsgBox(Form1.valor)" VBScript = New MSScriptControl.ScriptControl VBScript.Language = "VBScript" VBScript.AddObject("Form1", Me) VBScript.AllowUI = True End Sub Function funcion(ByVal valores As Double) As Double valores = valores + 1 funcion2() Return valores End Function Function valvula(ByVal dato1 As Integer, ByVal dato2 As Integer, ByVal dato3 As Integer) As Double() dato1 = dato1 + 1 dato2 = dato2 + 1 dato3 = dato3 + 1 valvula = New Double() {dato1, dato2, dato3} End FunctionEnd ClassPublic Class nodo Public uno As Integer Public dos As IntegerEnd ClassModule Module1 Public variable1 As Double = 120 Public Sub funcion2() variable1 = variable1 + 1 MsgBox(variable1) End SubEnd Module
It works to, but the problem is that when I try to use code lines like this:
"form1.otro(0)=1" or "form1.dictionary(index).id = 1" the program cannot compile that kind of lines.
------------------------------------------------------------------------------------------
I would like to know what is the best option to use dynamic code
if I use codecom if there is a way to call variables, functions etc.. declared in my program from the dynamic code
And if I use scripting with vb.net why when I try to use lines like "form1.otro(0)=1" or "form1.dictionary(index).id = 1" the program cannot compile that kind of lines.
Can you explain what you mean this statement? Are you saying that you would be creating dynamic code that would be calling to static code elements?
AndyAinscow
Are you attempting to write some sort of parser ?
eg. Your user enters things like:
Display 1 + 2*96 - 3*Foo(9)
and then your program works out what the resulting number will be (in this case 42) and then shows a message box with 'the answer is 42'
Or do you just need the user to enter eg. a number within a range and then you call a specific function (1 means square, 2 means square root....) ?
altariamx2003
ASKER
yes Eric you are right
I want to create dynamic code that will call static code elements of my program (like variables or functions) to compile and execute in runtime or at least that is the idea
Im sorry if in the last post I did dont explain myselft better
What I need is that my program create dynamic code that will call statis code elements of my projects like variables, arrays, subroutines, functions etc... not just a specific function.
I need that my program create in a string for example
Do id = id + 1 bandera = bandera + 1 arreglo = valvula(iteraciones(id).indice) Loop Until (bandera = 100)
Can you explain what you mean this statement? Are you saying that you would be creating dynamic code that would be calling to static code elements?