Descargar

Derivación por diferencias divididas y por fórmulas de alta precisión en Visual Basic 2005 (página 9)

Enviado por jaimemontoya


Partes: 1, 2, 3, 4, 5, 6, 7, 8, 9

Dim mParameters As New StringCollection()

mParameters.Add("ByVal X as Double")

'Las funciones a utilizar pertenece al espacio de nombres System.Math.

'se hace necesario entonces, crear un objeto StringCollection y agregar

'el namespace System.Math.

Dim mNameSpaces As New StringCollection()

mNameSpaces.Add("System.Math")

'Se invoca el método PrecompilarFunción y se verifica si se generó correctamente el assembly.

If mEval.PrecompilarAssembly(mExpresion, mParameters, mNameSpaces) Then

'Si el assembly se generó correctamente, se crea un array con los valores de los parametros a evaluar.

'Se invoca el método Evaluar y se asignan los resultados correspondientes.

'Se limpian todas las celdas para que no queden impresos resultados de procesos anteriores.

With AxMSFlexGrid2 'Para no estar poniendo por ejemplo AxMSFlexGrid1.set_ColWidth(0, 0) y así sucesivamente, no estar repitiendo a cada rato "AxMSFlexGrid1." NOTA: Desde el "With" hasta el "End With" solamente deben estarse mandando a imprimir valores a cada una de las celdas, y no estar haciendo cálculos con condiciones If ni nada de eso dentro del "With", pues todos los cálculos y condiciones deben hacerse afuera y venir a esta sección del "With" única y exclusivamente a hacer impresiones.

For fila As Integer = 0 To .Rows – 1

With AxMSFlexGrid2

.Row = fila

For columna As Integer = 0 To .Cols – 1

.set_TextMatrix(fila, columna, "") 'Por estar dentro de los For anidados, con esto se ponen valores String Empty en todas las celdas, de modo que no aparezca nada y queden todas las celdas limpias y sin resultados de cálculos hechos anteriormente.

Next

End With

Next

End With

'Se comienzan a hacer los cálculos.

'Valores para la fila de resultados.

tablas29(1, 1) = Val(TextBox2.Text) 'Almacena "a".

tablas29(1, 2) = Val(TextBox2.Text) + Val(TextBox3.Text) 'Almacena "a+h".

tablas29(1, 3) = Val(TextBox2.Text) + (2 * Val(TextBox3.Text)) 'Almacena "a+2h".

tablas29(1, 4) = Val(TextBox2.Text) – Val(TextBox3.Text) 'Almacena "a-h".

tablas29(1, 5) = Val(TextBox2.Text) – (2 * Val(TextBox3.Text)) 'Almacena "a-2h".

tablas29(1, 6) = mEval.Evaluar(Val(tablas29(1, 1))) 'Almacena "f(a)".

tablas29(1, 7) = mEval.Evaluar(Val(tablas29(1, 2))) 'Almacena "f(a+h)".

tablas29(1, 8) = mEval.Evaluar(Val(tablas29(1, 3))) 'Almacena "f(a+2h)".

tablas29(1, 9) = mEval.Evaluar(Val(tablas29(1, 4))) 'Almacena "f(a-h)".

tablas29(1, 10) = mEval.Evaluar(Val(tablas29(1, 5))) 'Almacena "f(a-2h)".

tablas29(1, 11) = (tablas29(1, 8) – (4 * tablas29(1, 7)) + (6 * tablas29(1, 6)) – (4 * tablas29(1, 9)) + tablas29(1, 10)) / (Val(TextBox3.Text) ^ (4)) 'Almacena "(f(a+2h)-4f(a+h)+6f(a)-4f(a-h)+f(a-2h))/h^4"="f''''(x)".

TextBox8.Text = "cuarta" 'Imprime el orden de la derivada.

TextBox9.Text = tablas29(1, 11) 'Este valor de respuesta se iría a imprimir en el TextBox8 como cuarta derivada de la función introducida por el usuario.

TextBox10.Text = TextBox3.Text 'Imprime el error utilizado.

'Para indicar que se realizarán operaciones con el objeto AxMSFlexGrid2

'sin necesidad de escribir su nombre.

'De aquí en adelante vienen las impresiones de los valores en las celdas correspondientes.

AxMSFlexGrid2.ForeColor = Color.Blue 'Cambia el color de letra de todas las celdas a azul.

With AxMSFlexGrid2 'Para no estar poniendo por ejemplo AxMSFlexGrid1.set_ColWidth(0, 0) y así sucesivamente, no estar repitiendo a cada rato "AxMSFlexGrid1." NOTA: Desde el "With" hasta el "End With" solamente deben estarse mandando a imprimir valores a cada una de las celdas, y no estar haciendo cálculos con condiciones If ni nada de eso dentro del "With", pues todos los cálculos y condiciones deben hacerse afuera y venir a esta sección del "With" única y exclusivamente a hacer impresiones.

'Esto servirá para poner color azul a la letra de las celdas donde se muestran los resultados y hacer más grande el ancho de las columnas donde aparecen las celdas de los resultados, pues se estará trabajando con 10 decimales. Nótese que no se involucra la primera fila ni la primera columna debido a que se programan los For comenzando desde 1 y no desde 0.

For fila As Integer = 1 To .Rows – 1 'Para no involucrar la primera fila, se comienza de 1 y no de 0.

With AxMSFlexGrid2

.Row = fila

For columna As Integer = 1 To .Cols – 1 'Para no involucrar la primera columna, se comienza de 1 y no de 0.

.Col = columna

.CellForeColor = Color.Blue 'Por estar dentro del For, cambia el color de letra de todas las celdas a azul (excepto la primera fila y la primera columna).

.set_ColWidth(columna, 1300) 'Por estar deltro del For, le da un ancho de 1300 a cada columna (excepto a la primera columna).

Next

End With

Next

'Establece la alineación del contenido de la columna 0

.set_ColAlignment(0, MSFlexGridLib.AlignmentSettings.flexAlignCenterCenter)

'Se le ponen los respectivos títulos a cada columna.

.set_TextMatrix(0, 1, "a") 'Imprime "a".

.set_TextMatrix(0, 2, "a+h") 'Imprime "a+h".

.set_TextMatrix(0, 3, "a+2h)") 'Imprime "a+2h".

.set_TextMatrix(0, 4, "a-h)") 'Imprime "a-h".

.set_TextMatrix(0, 5, "a-2h") 'Imprime "a-2h".

.set_TextMatrix(0, 6, "f(a)") 'Imprime "f(a)".

.set_TextMatrix(0, 7, "f(a+h)") 'Imprime "f(a+h)".

.set_TextMatrix(0, 8, "f(a+2h)") 'Imprime "f(a+2h)".

.set_TextMatrix(0, 9, "f(a-h)") 'Imprime "f(a-h)".

.set_TextMatrix(0, 10, "f(a-2h)") 'Imprime "f(a-2h)".

.set_TextMatrix(0, 11, "f''''(x)") 'Imprime "f''''(x)=(f(a+2h)-4f(a+h)+6f(a)-4f(a-h)+f(a-2))/h^4".

'Impresiones para la fila de resultados.

.set_TextMatrix(1, 1, Math.Round(Val(tablas29(1, 1)), 10)) 'Imprime el valor de "a" (con 10 decimales).

.set_TextMatrix(1, 2, Math.Round(Val(tablas29(1, 2)), 10)) 'Imprime el valor de "a+h" (con 10 decimales).

.set_TextMatrix(1, 3, Math.Round(Val(tablas29(1, 3)), 10)) 'Imprime el valor de "a+2h" (con 10 decimales).

.set_TextMatrix(1, 4, Math.Round(Val(tablas29(1, 4)), 10)) 'Imprime el valor de "a-h" (con 10 decimales).

.set_TextMatrix(1, 5, Math.Round(Val(tablas29(1, 5)), 10)) 'Imprime el valor de "a-2h" (con 10 decimales).

.set_TextMatrix(1, 6, Math.Round(Val(tablas29(1, 6)), 10)) 'Imprime el valor de "f(a)" (con 10 decimales).

.set_TextMatrix(1, 7, Math.Round(Val(tablas29(1, 7)), 10)) 'Imprime el valor de "f(a+h)" (con 10 decimales).

.set_TextMatrix(1, 8, Math.Round(Val(tablas29(1, 8)), 10)) 'Imprime el valor de "f(a+2h)" (con 10 decimales).

.set_TextMatrix(1, 9, Math.Round(Val(tablas29(1, 9)), 10)) 'Imprime el valor de "f(a-h)" (con 10 decimales).

.set_TextMatrix(1, 10, Math.Round(Val(tablas29(1, 10)), 10)) 'Imprime el valor de "f(a-2h)" (con 10 decimales).

.set_TextMatrix(1, 11, Math.Round(Val(tablas29(1, 11)), 10)) 'Imprime el valor de "f''''(x)=(f(a+2h)-4f(a+h)+6f(a)-4f(a-h)+f(a-2))/h^4" (con 10 decimales).

End With

End If

End If

'CASO 30. QUINTA DERIVADA POR FÓRMULAS DE ALTA PRECISIÓN CENTRADAS.

If (ComboBox1.SelectedItem = "Fórmulas de Alta Precisión Centradas") And (ComboBox2.SelectedItem = "5ta. derivada") Then

Dim i, j As Integer '"i" significará "fila" y "j" significará columna, de modo que se trabajará con (i,j)=(fila,columna)

'Establece cuántas filas y columnas tendrá el Grid.

AxMSFlexGrid2.Rows = 2 'Establece 2 filas.

AxMSFlexGrid2.Cols = 14 'Establece 14 columnas.

'Se crea una nueva instancia de la clase Evaluador.

Dim mEval As New Evaluador()

'Se crea una variable tipo string y se le asigna la expresión que se quiere evaluar.

Dim mExpresion As String = TextBox1.Text ' = "X".

'Se crea un objeto StringCollection y se le agregan los parámetros de entrada que usará el método eval.

Dim mParameters As New StringCollection()

mParameters.Add("ByVal X as Double")

'Las funciones a utilizar pertenece al espacio de nombres System.Math.

'se hace necesario entonces, crear un objeto StringCollection y agregar

'el namespace System.Math.

Dim mNameSpaces As New StringCollection()

mNameSpaces.Add("System.Math")

'Se invoca el método PrecompilarFunción y se verifica si se generó correctamente el assembly.

If mEval.PrecompilarAssembly(mExpresion, mParameters, mNameSpaces) Then

'Si el assembly se generó correctamente, se crea un array con los valores de los parametros a evaluar.

'Se invoca el método Evaluar y se asignan los resultados correspondientes.

'Se limpian todas las celdas para que no queden impresos resultados de procesos anteriores.

With AxMSFlexGrid2 'Para no estar poniendo por ejemplo AxMSFlexGrid1.set_ColWidth(0, 0) y así sucesivamente, no estar repitiendo a cada rato "AxMSFlexGrid1." NOTA: Desde el "With" hasta el "End With" solamente deben estarse mandando a imprimir valores a cada una de las celdas, y no estar haciendo cálculos con condiciones If ni nada de eso dentro del "With", pues todos los cálculos y condiciones deben hacerse afuera y venir a esta sección del "With" única y exclusivamente a hacer impresiones.

For fila As Integer = 0 To .Rows – 1

With AxMSFlexGrid2

.Row = fila

For columna As Integer = 0 To .Cols – 1

.set_TextMatrix(fila, columna, "") 'Por estar dentro de los For anidados, con esto se ponen valores String Empty en todas las celdas, de modo que no aparezca nada y queden todas las celdas limpias y sin resultados de cálculos hechos anteriormente.

Next

End With

Next

End With

'Se comienzan a hacer los cálculos.

'Valores para la fila de resultados.

tablas30(1, 1) = Val(TextBox2.Text) + Val(TextBox3.Text) 'Almacena "a+h".

tablas30(1, 2) = Val(TextBox2.Text) + (2 * Val(TextBox3.Text)) 'Almacena "a+2h".

tablas30(1, 3) = Val(TextBox2.Text) + (3 * Val(TextBox3.Text)) 'Almacena "a+3h".

tablas30(1, 4) = Val(TextBox2.Text) – Val(TextBox3.Text) 'Almacena "a-h".

tablas30(1, 5) = Val(TextBox2.Text) – (2 * Val(TextBox3.Text)) 'Almacena "a-2h".

tablas30(1, 6) = Val(TextBox2.Text) – (3 * Val(TextBox3.Text)) 'Almacena "a-3h".

tablas30(1, 7) = mEval.Evaluar(Val(tablas30(1, 1))) 'Almacena "f(a+h)".

tablas30(1, 8) = mEval.Evaluar(Val(tablas30(1, 2))) 'Almacena "f(a+2h)".

tablas30(1, 9) = mEval.Evaluar(Val(tablas30(1, 3))) 'Almacena "f(a+3h)".

tablas30(1, 10) = mEval.Evaluar(Val(tablas30(1, 4))) 'Almacena "f(a-h)".

tablas30(1, 11) = mEval.Evaluar(Val(tablas30(1, 5))) 'Almacena "f(a-2h)".

tablas30(1, 12) = mEval.Evaluar(Val(tablas30(1, 6))) 'Almacena "f(a-3h)".

tablas30(1, 13) = (tablas30(1, 9) – 5 * tablas30(1, 8) + 10 * tablas30(1, 7) – 10 * tablas30(1, 10) + 5 * tablas30(1, 11) – tablas30(1, 12)) / (2 * (Val(TextBox3.Text) ^ (5))) 'Almacena "(f(a+3h)-5f(a+2h)+10f(a+h)-10f(a-h)+5f(a-2h)-f(a-3h))/h^5"="f'''''(x)".

TextBox8.Text = "quinta" 'Imprime el orden de la derivada.

TextBox9.Text = tablas30(1, 13) 'Este valor de respuesta se iría a imprimir en el TextBox8 como cuarta derivada de la función introducida por el usuario.

TextBox10.Text = TextBox3.Text 'Imprime el error utilizado.

'Para indicar que se realizarán operaciones con el objeto AxMSFlexGrid2

'sin necesidad de escribir su nombre.

'De aquí en adelante vienen las impresiones de los valores en las celdas correspondientes.

AxMSFlexGrid2.ForeColor = Color.Blue 'Cambia el color de letra de todas las celdas a azul.

With AxMSFlexGrid2 'Para no estar poniendo por ejemplo AxMSFlexGrid1.set_ColWidth(0, 0) y así sucesivamente, no estar repitiendo a cada rato "AxMSFlexGrid1." NOTA: Desde el "With" hasta el "End With" solamente deben estarse mandando a imprimir valores a cada una de las celdas, y no estar haciendo cálculos con condiciones If ni nada de eso dentro del "With", pues todos los cálculos y condiciones deben hacerse afuera y venir a esta sección del "With" única y exclusivamente a hacer impresiones.

'Esto servirá para poner color azul a la letra de las celdas donde se muestran los resultados y hacer más grande el ancho de las columnas donde aparecen las celdas de los resultados, pues se estará trabajando con 10 decimales. Nótese que no se involucra la primera fila ni la primera columna debido a que se programan los For comenzando desde 1 y no desde 0.

For fila As Integer = 1 To .Rows – 1 'Para no involucrar la primera fila, se comienza de 1 y no de 0.

With AxMSFlexGrid2

.Row = fila

For columna As Integer = 1 To .Cols – 1 'Para no involucrar la primera columna, se comienza de 1 y no de 0.

.Col = columna

.CellForeColor = Color.Blue 'Por estar dentro del For, cambia el color de letra de todas las celdas a azul (excepto la primera fila y la primera columna).

.set_ColWidth(columna, 1300) 'Por estar deltro del For, le da un ancho de 1300 a cada columna (excepto a la primera columna).

Next

End With

Next

'Establece la alineación del contenido de la columna 0

.set_ColAlignment(0, MSFlexGridLib.AlignmentSettings.flexAlignCenterCenter)

'Se le ponen los respectivos títulos a cada columna.

.set_TextMatrix(0, 1, "a+h") 'Imprime "a+h".

.set_TextMatrix(0, 2, "a+2h") 'Imprime "a+2h".

.set_TextMatrix(0, 3, "a+3h") 'Imprime "a+3h".

.set_TextMatrix(0, 4, "a-h") 'Imprime "a-h".

.set_TextMatrix(0, 5, "a-2h") 'Imprime "a-2h".

.set_TextMatrix(0, 6, "a-3h") 'Imprime "a-3h".

.set_TextMatrix(0, 7, "f(a+h)") 'Imprime "f(a+h)".

.set_TextMatrix(0, 8, "f(a+2h)") 'Imprime "f(a+2h)".

.set_TextMatrix(0, 9, "f(a+3h)") 'Imprime "f(a+3h)".

.set_TextMatrix(0, 10, "f(a-h)") 'Imprime "f(a-h)".

.set_TextMatrix(0, 11, "f(a-2h)") 'Imprime "f(a-2h)".

.set_TextMatrix(0, 12, "f(a-3h)") 'Imprime "f(a-3h)".

.set_TextMatrix(0, 13, "f'''''(x)") 'Imprime "f'''''(x)=(f(a+3h)-5f(a+2h)+10f(a+h)-10f(a-h)+5f(a-2h)-f(a-3h))/h^5".

'Impresiones para la fila de resultados.

.set_TextMatrix(1, 1, Math.Round(Val(tablas30(1, 1)), 10)) 'Imprime el valor de "a+h" (con 10 decimales).

.set_TextMatrix(1, 2, Math.Round(Val(tablas30(1, 2)), 10)) 'Imprime el valor de "a+2h" (con 10 decimales).

.set_TextMatrix(1, 3, Math.Round(Val(tablas30(1, 3)), 10)) 'Imprime el valor de "a+3h" (con 10 decimales).

.set_TextMatrix(1, 4, Math.Round(Val(tablas30(1, 4)), 10)) 'Imprime el valor de "a-h" (con 10 decimales).

.set_TextMatrix(1, 5, Math.Round(Val(tablas30(1, 5)), 10)) 'Imprime el valor de "a-2h" (con 10 decimales).

.set_TextMatrix(1, 6, Math.Round(Val(tablas30(1, 6)), 10)) 'Imprime el valor de "a-3h" (con 10 decimales).

.set_TextMatrix(1, 7, Math.Round(Val(tablas30(1, 7)), 10)) 'Imprime el valor de "f(a+h)" (con 10 decimales).

.set_TextMatrix(1, 8, Math.Round(Val(tablas30(1, 8)), 10)) 'Imprime el valor de "f(a+2h)" (con 10 decimales).

.set_TextMatrix(1, 9, Math.Round(Val(tablas30(1, 9)), 10)) 'Imprime el valor de "f(a+3h)" (con 10 decimales).

.set_TextMatrix(1, 10, Math.Round(Val(tablas30(1, 10)), 10)) 'Imprime el valor de "f(a-h)" (con 10 decimales).

.set_TextMatrix(1, 11, Math.Round(Val(tablas30(1, 11)), 10)) 'Imprime el valor de "f(a-2h) (con 10 decimales).

.set_TextMatrix(1, 12, Math.Round(Val(tablas30(1, 12)), 10)) 'Imprime el valor de "f(a-3h)" (con 10 decimales).

.set_TextMatrix(1, 13, Math.Round(Val(tablas30(1, 13)), 10)) 'Imprime el valor de "f'''''(x)=(f(a+3h)-5f(a+2h)+10f(a+h)-10f(a-h)+5f(a-2h)-f(a-3h))/h^5" (con 10 decimales).

End With

End If

End If

End Sub

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

End

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

'Limpiar los valores de los TextBox y de los ComboBox.

TextBox1.Text = ""

ComboBox1.Text = ""

ComboBox2.Text = ""

TextBox2.Text = ""

TextBox3.Text = ""

TextBox4.Text = ""

TextBox5.Text = ""

TextBox6.Text = ""

TextBox7.Text = ""

TextBox8.Text = ""

TextBox9.Text = ""

TextBox10.Text = ""

'Se limpian todas las celdas para que no queden impresos resultados de procesos anteriores.

With AxMSFlexGrid1 'Para no estar poniendo por ejemplo AxMSFlexGrid1.set_ColWidth(0, 0) y así sucesivamente, no estar repitiendo a cada rato "AxMSFlexGrid1." NOTA: Desde el "With" hasta el "End With" solamente deben estarse mandando a imprimir valores a cada una de las celdas, y no estar haciendo cálculos con condiciones If ni nada de eso dentro del "With", pues todos los cálculos y condiciones deben hacerse afuera y venir a esta sección del "With" única y exclusivamente a hacer impresiones.

For fila As Integer = 0 To .Rows – 1

With AxMSFlexGrid1

.Row = fila

For columna As Integer = 0 To .Cols – 1

.set_TextMatrix(fila, columna, "") 'Por estar dentro de los For anidados, con esto se ponen valores String Empty en todas las celdas, de modo que no aparezca nada y queden todas las celdas limpias y sin resultados de cálculos hechos anteriormente.

Next

End With

Next

End With

'Se limpian todas las celdas para que no queden impresos resultados de procesos anteriores.

With AxMSFlexGrid2 'Para no estar poniendo por ejemplo AxMSFlexGrid1.set_ColWidth(0, 0) y así sucesivamente, no estar repitiendo a cada rato "AxMSFlexGrid1." NOTA: Desde el "With" hasta el "End With" solamente deben estarse mandando a imprimir valores a cada una de las celdas, y no estar haciendo cálculos con condiciones If ni nada de eso dentro del "With", pues todos los cálculos y condiciones deben hacerse afuera y venir a esta sección del "With" única y exclusivamente a hacer impresiones.

For fila As Integer = 0 To .Rows – 1

With AxMSFlexGrid2

.Row = fila

For columna As Integer = 0 To .Cols – 1

.set_TextMatrix(fila, columna, "") 'Por estar dentro de los For anidados, con esto se ponen valores String Empty en todas las celdas, de modo que no aparezca nada y queden todas las celdas limpias y sin resultados de cálculos hechos anteriormente.

Next

End With

Next

End With

End Sub

End Class

Se han creado también dos clases. El código de la clase EvalClase.vb es el siguiente:

Imports System.Math

Public Class EvalClase

Public Shared Function Eval(ByVal X As Double) As Object

Return X

End Function

End Class

La clase Evaluador.vb tiene el siguiente código:

Imports System.Text

Imports System.CodeDom.Compiler

Imports System.Collections.Specialized

Public Class Evaluador

Private oEnsamblado As System.Reflection.Assembly

Public Function PrecompilarAssembly(ByVal Funcion As String, _

ByVal ParametrosList As StringCollection, ByVal NameSpaceList As StringCollection) As Boolean

Dim mStrings As String

Dim mParametros As String

'Definimos un objeto de tipo StringBuilder que contendra el código a compilar

Dim CodigoFuente As New StringBuilder()

'Agregamos los Imports necesarios a nuestro codigo fuente

For Each mStrings In NameSpaceList

CodigoFuente.Append("Imports " & mStrings & vbCr)

Next

'Preparamos un string con los parametros que usará el metodo Eval

'de de la clase EvalClase

For Each mStrings In ParametrosList

mParametros &= ", " & mStrings

Next

mParametros = Trim(mParametros)

If mParametros.Length > 0 Then

mParametros = Trim(Mid(mParametros, 2))

End If

'Terminamos de construir la clase a compilar

CodigoFuente.Append("Public Class EvalClase" & vbCr)

CodigoFuente.Append(" Public Shared Function Eval(" & _

mParametros & ") as Object" & vbCr)

CodigoFuente.Append(" Return " & Funcion & vbCr)

CodigoFuente.Append(" End Function " & vbCr)

CodigoFuente.Append("End Class " & vbCr)

'Creamos una instancia de la clase VBCodeProvider

'que usaremos para obtener una referencia a una interfaz ICodeCompiler

Dim oCProvider As New VBCodeProvider()

Dim oCompiler As ICodeCompiler = oCProvider.CreateCompiler

'Usamos la clase CompilerParameters para pasar parámetros al compilador

'En particular, definimos que el assembly sea compilado en memoria.

Dim oCParam As New CompilerParameters()

oCParam.GenerateInMemory = True

'Creamos un objeto CompilerResult que obtendrá los resultados de la compilación

Dim oCResult As CompilerResults

oCResult = oCompiler.CompileAssemblyFromSource(oCParam, CodigoFuente.ToString)

'Comprobamos que no existan errores de compilación.

Dim oCError As CompilerError

If oCResult.Errors.Count > 0 Then

'Si existen errores los mostramos.

'Si bien, podriamos implementar un mejor método para visualizar

'los errores de compilación, este nos servirá por los momentos.

For Each oCError In oCResult.Errors

MsgBox(oCError.ErrorText.ToString)

Next

Return False

Else

'Como el ensamblado se generó en memoria, debemos obtener

'una referencia al ensamblado generado, para esto usamos

'la propiedad CompiledAssembly

oEnsamblado = oCResult.CompiledAssembly

Return True

End If

End Function

Public Function Evaluar(ByVal ParamArray Parametros() As Object) As Object

If oEnsamblado Is Nothing Then

Return Nothing

Else

'Instanciamos la clase EvalClase de nuestro assembly

'creando un tipo a partir de ella.

Dim oClass As Type = oEnsamblado.GetType("EvalClase")

'Usamos GetMethod para accesar al método Eval, e invocamos este con los parametros necesarios.

Return oClass.GetMethod("Eval").Invoke(Nothing, Parametros)

End If

End Function

End Class

 

 

 

 

Autor:

Jaime Montoya

Santa Ana, 21 de julio de 2008

El Salvador

Partes: 1, 2, 3, 4, 5, 6, 7, 8, 9
 Página anterior Volver al principio del trabajoPágina siguiente