vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 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
Re: Mathematische Rechenoperationen ausführen 
Autor: Noeppkes
Datum: 24.01.13 15:08

Hallo Manfred.

Ja so in etwa.

Ist aufwendiger auf das ScriptControl.

Funkltioniert aber nicht richtig.
Habe mal als Test folgendes gemacht:
Habs umgeschrieben auf eine Funktion, da ich später einfach ein String übergeben möchte.
iText mal festgesetzt auf "10+3"

myAsm ist allerdings immer Nothing.
Kannst du mir sagen warum.
(Der Code scheint ja von dir zu sein).

noeppkes ...

    Function formel_ausrechnen() As String
        Const cNL As String = Microsoft.VisualBasic.vbNewLine
 
        Dim _dezimalpunkt As String = _
        Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSepa_
        rator
        Const cStd_Dezimale As String = "."            ' 
        ' VB-Standard-Dezimalpunkt
 
        Dim _errorlabel As Windows.Forms.Label     ' Anzeige der ersten 
        ' Fehlermeldung
        Dim _digits As Integer = 4                 ' Ergebnisrundung, 
        ' Nachkommastellen
        Dim _LastString As String = String.Empty   ' Text-Eigenschaft vor 
        ' Auswertung
 
 
 
        Dim itext As String = "10 + 3"
 
        ' Standard-Dezimalpunkt einrichten
        itext = itext.Replace(_dezimalpunkt, cStd_Dezimale)
 
        MsgBox(itext)
 
        ' Zusammenstellung des Codes der Assembly für die Berechnung
        Dim CCode 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() as Double?" & cNL & _
        "Dim erg? as Double = " & itext & cNL & _
         "Return erg" & cNL & _
         "End Function" & cNL & "End Class" & cNL & "End NameSpace"
 
        Dim myAsm As System.Reflection.Assembly = _
        CreateAssemblyFromCode(CCode)
 
        MsgBox(CCode)
        MsgBox(myAsm)
        If Not myAsm Is Nothing Then
            Dim myCls As Object = _
            myAsm.CreateInstance("nsComputeFormula.ComputeFormula")
            MsgBox("1")
            ' Zugriff auf die Berechnungsmethode in der Klasse 
            Dim myMethod As System.Reflection.MethodInfo = _
            myCls.GetType.GetMethod("Compute")
            Dim erg? As Double = CType(myMethod.Invoke(myCls, Nothing), Double?)
 
            If erg.HasValue Then
                MsgBox("2")
                Dim ierg As Double = erg.Value
                If Not Double.IsNaN(ierg) And Not Double.IsInfinity(ierg) Then
                    _LastString = Me.Text ' Originalstring speichern
                    MsgBox(CStr(Math.Round(ierg, _digits)))
                    'ElseIf _errorlabel IsNot Nothing Then
                    '_errorlabel.Text = "Ergebnis enthält IEEE-Sonderwert: " & 
                    ' CStr(ierg)
                End If
            End If  ' HasValue?
        End If ' ASM <> nothing?
 
        Return ("")
    End Function
 
    Private Function CreateAssemblyFromCode(ByVal Code As String) As  _
      System.Reflection.Assembly
 
        ' Assembly aus VB.NET-Sourcecode in  Codestring erstellen
 
        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 _errorlabel IsNot Nothing Then
            '_errorlabel.Text = ComResults.Errors(0).ErrorText
            'End If
            Return Nothing
        Else
            Return ComResults.CompiledAssembly
        End If
    End Function
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Mathematische Rechenoperationen ausführen2.365Noeppkes24.01.13 14:22
Re: Mathematische Rechenoperationen ausführen1.699Manfred X24.01.13 14:33
Re: Mathematische Rechenoperationen ausführen1.706Noeppkes24.01.13 15:08
Re: Mathematische Rechenoperationen ausführen1.554Manfred X24.01.13 15:15
Re: Mathematische Rechenoperationen ausführen1.541Noeppkes24.01.13 15:22
Re: Mathematische Rechenoperationen ausführen1.733Manfred X24.01.13 15:30
Re: Mathematische Rechenoperationen ausführen1.477Noeppkes24.01.13 15:50
Re: Mathematische Rechenoperationen ausführen1.555Manfred X24.01.13 15:57
Re: Mathematische Rechenoperationen ausführen1.586Preisser24.01.13 16:07
Re: Mathematische Rechenoperationen ausführen1.494ModeratorFZelle24.01.13 17:00

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