Monografias.com > Sin categoría
Descargar Imprimir Comentar Ver trabajos relacionados

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 

Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

Categorias
Newsletter