vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Klasse zur Formelberechnung 
Autor: Manfred X
Datum: 05.05.15 13:29

Imports System.CodeDom.Compiler
 
Public Class FormulaAssembly
 
    Dim _formula As String
    Public ReadOnly Property Formula() As String
        Get
            Return _formula
        End Get
    End Property
 
    Dim _compilererror As String
    Public ReadOnly Property CompilerError As String
        Get
            Return _compilererror
        End Get
    End Property
 
    Dim _FormulaASM As System.Reflection.Assembly
    Dim _FormulaInstance As Object
    Public ReadOnly Property FormulaInstance As Object
        Get
            Return _FormulaInstance
        End Get
    End Property
 
    Dim _FormulaInfo As System.Reflection.MethodInfo
    Public ReadOnly Property FormulaInfo As System.Reflection.MethodInfo
        Get
            Return _FormulaInfo
        End Get
    End Property
 
 
    Public Sub New(ByVal Formula As String)
        _formula = Formula
        Dim cNL As String = vbNewLine
 
        Dim params As String = ""
        For i As Integer = 1 To 6
            If _formula.Contains("arg" & CStr(i)) Then
                params &= "arg" & CStr(i) & " as double, "
            End If
        Next i
        params = params.Trim(" "c, ","c)
        params = "(" & params & ")"
 
        Dim code As String = _
         "Option Strict On : Option Explicit On : Option Infer Off" & cNL & _
        "Imports System.Math" & cNL & _
        "NameSpace nsComputeFormula" & cNL & _
        "Public Class ComputeFormula" & cNL & _
        "Public Function Compute" & params & " as Double?" & cNL & _
        "Dim erg? as Double = " & Formula & cNL & _
         "Return erg" & cNL & _
         "End Function" & cNL & "End Class" & cNL & "End NameSpace"
 
        _FormulaASM = CreateAssemblyFromCode(code)
        If Not _FormulaASM Is Nothing Then
            _FormulaInstance =
            _FormulaASM.CreateInstance("nsComputeFormula.ComputeFormula")
            If _FormulaInstance IsNot Nothing Then
                _FormulaInfo = _
                _FormulaInstance.GetType.GetMethod("Compute")
            End If
        End If
    End Sub
 
    Private Function CreateAssemblyFromCode(ByVal Code As String) As  _
    System.Reflection.Assembly
 
        ' Assembly aus VB.NET-Sourcecode in  Codestring erstellen
        _compilererror = ""
 
        Dim VB_CP As CodeDomProvider = _
        New Microsoft.VisualBasic.VBCodeProvider()
 
        Dim ComParams As New CompilerParameters() _
        With {.GenerateInMemory = True}
 
        ' Code Compilieren und das Compiler-Ergebnis ermitteln
        Dim ComResults As CompilerResults = _
        VB_CP.CompileAssemblyFromSource(ComParams, Code)
        VB_CP.Dispose()
        If ComResults.Errors.Count > 0 Then
            If _compilererror = "" Then
                _compilererror = ComResults.Errors(0).ErrorText
            End If
            Return Nothing
        Else
            Return ComResults.CompiledAssembly
        End If
    End Function
End Class
Anwendung:
Dim fa As New FormulaAssembly("sin(arg1) * cos(arg2)")
If fa.FormulaInstance Is Nothing Then
   MsgBox(fa.CompilerError)
Else
   Dim erg1? As Double = _
       CType(fa.FormulaInfo.Invoke(fa.FormulaInstance, _
       New Object() {1.5, 2.5}), Double?)
 
   Dim erg2? As Double = _
       CType(fa.FormulaInfo.Invoke(fa.FormulaInstance, _
        New Object() {Math.PI, Math.PI / 2}), Double?)
 
End If
Die Argumente müssen als arg1, arg2, ... im Formeltext übergeben werden.

Beitrag wurde zuletzt am 05.05.15 um 13:30:58 editiert.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Formel aus Variable zur Berechnung nutzen1.897ManRe05.05.15 10:37
Re: Formel aus Variable zur Berechnung nutzen850Manfred X05.05.15 11:24
Klasse zur Formelberechnung896Manfred X05.05.15 13:29

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel