Descargar

Métodos de integración numérica en Visual Basic 2005 (página 6)

Enviado por jaimemontoya


Partes: 1, 2, 3, 4, 5, 6

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

 

 

Jaime Montoya

Santa Ana, 23 de julio de 2008

El Salvador

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