invalidCastExeption beim Konvertieren

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Niko Ortner.

    invalidCastExeption beim Konvertieren

    Hallo.

    Ich entwickle gerade einen Musikplayer. Wiedergegeben wird die Musik über mciSendString.

    Nun möchte ich die Länge der Musik ermitteln:

    VB.NET-Quellcode

    1. Private Function ErmitteleLaenge()
    2. If IsPlaying Then
    3. Dim laenge As Double 'laänge in Sekunden
    4. Dim sReturn As String = Space$(256)
    5. mciSendString("status Datei length", sReturn, Len(sReturn), 0)
    6. laenge = Convert.ToDouble(sReturn / 1000) 'invalidCastExeption
    7. MsgBox(laenge)
    8. Return laenge
    9. Else
    10. Return 0
    11. End If
    12. End Function



    Beim Konvertieren in den Double bekomme ich eine invalidCastExeption. Ich weiß nicht wieso und Google konnte mir auch nicht richtig weiterhelfen.

    Weiß jemand, was ich hier falsch gemacht habe?
    sollte man das in .Net nicht eher mit einem StringBuilder machen?!
    außerdem solltest du sReturn konvertieren, bevor du es teilst, guck dir außerdem mal den Inhalt von sReturn an, evtl. kannst du es gar nicht konvertieren ;)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Ja, das geht.
    Aber anstelle von

    VB.NET-Quellcode

    1. laenge = Convert.ToDouble(sReturn / 1000)


    schreib

    VB.NET-Quellcode

    1. laenge = Convert.ToDouble(Val(sReturn) / 1000)
    2. 'oder
    3. laenge = Convert.ToDouble(CDbl(sReturn) / 1000)


    Denn sReturn ist vom Typ String und einen String kann man nicht durch einen numerischen Typ teilen.
    Vorher muss also aus dem String ein numerischer Typ gemacht werden.
    Anschließend dividiert man. Das Ergebnis ist dann auch vom Typ Double.

    Val() gibt einen Numerischen Typ zurück, der an die Zahl angepasst ist (für 0.1 reicht Single, wenn Single zu ungenau wäre wird Double verwendet. Ich denke decimal ist am genauesten. Zwischen 0 und 255 kommt Byte raus, usw.)
    CDbl() gibt fix einen Double zurück, auch wenn die Zahl 157 ist.


    Noch eine Frage an Kangaroo: Was macht das ? vor der Variable?
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    ok wir wandeln per Val oder per CDbl, was veraltete Funktionen sind den Wert in Double um, teilen durch 1000 wobei der Wert Double bleibt und konvertieren dann diesen Double Wert nach Double...WOW

    VB.NET-Quellcode

    1. laenge = Convert.ToDouble(sReturn) / 1000 'Schon besser
    2. 'oder
    3. laenge = Double.Parse(sReturn / 1000)
    4. 'oder Perfekt:
    5. If Double.TryParse(sReturn,laenge) Then
    6. laenge /= 1000
    7. Else
    8. 'Kann nicht konvertiert werden->Fehlerbehandlung
    9. End If
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Hoppla, hab ich übersehen.
    Double in Double umwandeln bringt's natürlich nicht.

    Mit Double.TryParse ist es natürlich ganz perfekt :thumbsup:
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils