vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 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 - Fortgeschrittene
Re: 5000 Argumente ... 
Autor: Hannes H.
Datum: 28.05.05 15:20

Hallo

Ich bin etwas weiter gekommen.
Hier ist der Code der fast paßt:
Public Class Eval
        Private setString As String
        Private codeString As String
 
        Public Sub addSet(ByVal code As String)
            setString &= code + vbCrLf
        End Sub
 
        Public Function Evaluate(ByVal expr As String) As Double
            addCode("Option Explicit Off")
            addCode("NameSpace n")
            addCode("Public Class t")
            addCode("Public Function f() as double")
            addCode(setString)
            addCode("Return " & expr)
            addCode("End Function")
            addCode("End Class")
            addCode("End NameSpace")
 
            Debug.Write(codeString)
 
            Dim ASM As [Assembly] = CreateAssemblyFromCode(codeString)
            ' ... und ein Test der Assembly:
            Dim O As Object = ASM.CreateInstance("n.t")
            Dim T As Type = O.GetType()
 
            Dim MI As MethodInfo = T.GetMethod("f")
            Return MI.Invoke(O, Nothing)
 
        End Function
 
        Private Function addCode(ByVal code As String)
            codeString &= code & vbCrLf
        End Function
 
        Private Function CreateAssemblyFromCode(ByVal Code As String) As _
          [Assembly]
            ' Assembly aus VB.NET-Sourcecode in einem String erzeugen:
            ' CodeDomProvider für VB.NET erzeugen
            Dim CDP As CodeDomProvider = New _
              Microsoft.VisualBasic.VBCodeProvider                      ' 
            ' Compiler erzeugen
            Dim Compiler As ICodeCompiler = CDP.CreateCompiler()                _
                       ' Compiler-Parameter erzeugen
            Dim CP As New CompilerParameters
            CP.GenerateInMemory = True
            ' Compilieren und Compiler-Ergebnis ermitteln
            Dim CR As CompilerResults = Compiler.CompileAssemblyFromSource(CP, _
              Code)
            ' Im Fehlerfall Nothing zurückgeben
            If CR.Errors.Count <> 0 Then
                Return Nothing
            Else
                Return CR.CompiledAssembly
            End If
        End Function
 
    End Class
 
    Sub Test()
 
        Dim set1 As String = "x = 3"
        Dim set2 As String = "y = 4"
        Dim expr As String = "(2*x+3*y)*2"
 
        Dim eval1 As New Eval
 
        eval1.addSet(set1)
        eval1.addSet(set2)
        Dim result As Double = eval1.Evaluate(expr)
 
        Debug.WriteLine("Wenn " & set1 & " und " & set2 & " dann " & expr & " =" & _
          "" & result.ToString())
End Sub
Jedoch müßte ich True - False Auswerten

        wert(0) = 3
        wert(1) = 4
        Dim set1 As String = "wert(0)"
        Dim set2 As String = "wert(1)"
 
        Dim expr As String = "wert(0) = wert(1)"
 
        Dim eval1 As New Eval
 
        eval1.addSet(set1)
        eval1.addSet(set2)
 
        Dim result As Double = eval1.Evaluate(expr)
        If result.ToString = "0" Then
            MessageBox.Show("Falsch")
        ElseIf result.ToString = "-1" Then
            MessageBox.Show("Richtig")
        End If
So sollte die Abfrage dann sein, jedoch liefert dies eine Fehlermeldung:

Eine nicht behandelte Ausnahme des Typs 'System.NullReferenceException' ist in Spielwiese.exe aufgetreten.

Zusätzliche Informationen: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

Kann mir jemand den Code ändern, damit die Variablen aus dem Code übernommen werden beim Vergleich?

Vielen Dank
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
5000 Argumente ...2.173Hannes H.28.05.05 08:50
Re: 5000 Argumente ...1.541Spassmann28.05.05 09:32
Re: 5000 Argumente ...1.591Hannes H.28.05.05 09:55
Re: 5000 Argumente ...1.457Spassmann28.05.05 12:27
Re: 5000 Argumente ...1.540Hannes H.28.05.05 13:16
Re: 5000 Argumente ...1.576Hannes H.28.05.05 13:17
Re: 5000 Argumente ...1.522Hannes H.28.05.05 15:20
Re: 5000 Argumente ...1.566Micke30.05.05 15:39
Re: 5000 Argumente ...1.509Hannes H.02.06.05 14:14
Re: 5000 Argumente ...1.486Micke05.06.05 11:24
Re: 5000 Argumente ...1.607Hannes H.05.06.05 11:42
Re: 5000 Argumente ...1.497Micke05.06.05 12:52
Re: 5000 Argumente ...1.505Hannes H.05.06.05 13:43
Re: 5000 Argumente ...1.539ModeratorFZelle05.06.05 14:50
Re: 5000 Argumente ...1.513Hannes H.05.06.05 16:24
Re: 5000 Argumente ...1.537Micke05.06.05 20:53
Re: 5000 Argumente ...1.540Hannes H.05.06.05 22:18
Re: 5000 Argumente ...1.462ModeratorFZelle06.06.05 09:21
Re: 5000 Argumente ...1.493Hannes H.06.06.05 10:07
Re: 5000 Argumente ...1.484ModeratorFZelle06.06.05 12:45
Re: 5000 Argumente ...1.597Hannes H.06.06.05 14:34
Re: 5000 Argumente ...1.584ModeratorFZelle06.06.05 20:03
Re: 5000 Argumente ...1.575ModeratorFZelle06.06.05 20:06
PS1.521Micke06.06.05 22:34
Re: PS1.482ModeratorFZelle07.06.05 08:58
Re: 5000 Argumente ...1.500Hannes H.07.06.05 09:15
Re: 5000 Argumente ...1.602Hannes H.07.06.05 11:28
Re: 5000 Argumente ...1.542ModeratorFZelle07.06.05 11:58
Re: 5000 Argumente ...1.521Hannes H.07.06.05 12:03
Re: 5000 Argumente ...1.472Hannes H.07.06.05 11:58
Re: 5000 Argumente ...1.522Hannes H.08.06.05 11:21
Re: 5000 Argumente ...1.482ModeratorFZelle09.06.05 09:34
Re: 5000 Argumente ...1.592Hannes H.10.06.05 11:44
Re: 5000 Argumente ...1.478ModeratorFZelle10.06.05 20:40
Re: 5000 Argumente ...1.440Hannes H.11.06.05 17:48
Re: 5000 Argumente ...1.520ModeratorFZelle11.06.05 19:35
Re: 5000 Argumente ...1.465Hannes H.12.06.05 10:28
Re: 5000 Argumente ...1.514ModeratorFZelle12.06.05 11:04
Re: 5000 Argumente ...1.521Hannes H.12.06.05 11:39
Re: 5000 Argumente ...1.507ModeratorFZelle13.06.05 09:21
Re: 5000 Argumente ...1.420Hannes H.19.06.05 11:21
Re: 5000 Argumente ...1.520ModeratorFZelle20.06.05 09:17

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