Fehler bei verwendung von dll..

  • VB.NET

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Fehler bei verwendung von dll..

    Hi,

    ich bin grad dabei ´ne dll zu erstellen..
    mein problem ist, das ich die daten, die in der dll verwendet werden sollen, von der form ausgegeben werden sollen und dann in der dll verwendet werden sollen.

    also so:

    in der dll:

    VB.NET-Quellcode

    1. Public Class switchlib
    2. Public erstes_x As Double = 0
    3. Public erstes_y As Double = 0
    4. ....


    und in der form..:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. switchlib.erstes_x = GroupBox1.Location.X
    3. switchlib.erstes_y = GroupBox1.Location.Y
    4. End Sub


    der Fehler, der ausgegeben wird:

    Quellcode

    1. Eine Ausnahme (erste Chance) des Typs "System.NullReferenceException" ist in switchlib.exe aufgetreten.



    was mache ich falsch?

    LG
    Deklariere erstes_x und erstes_y als Public Shared.
    Ansonsten musst du eine neue Instanz erstellen.

    Also so:

    VB.NET-Quellcode

    1. Public Class switchlib
    2. Public Shared erstes_x As Double = 0
    3. Public Shared erstes_y As Double = 0
    4. End Class

    VB.NET-Quellcode

    1. switchlib.erstes_x = CInt(GroupBox1.Location.X)
    2. switchlib.erstes_y = CInt(GroupBox1.Location.Y)
    Oder du lässt deine Klasse unverändert und wendest sie so an:

    VB.NET-Quellcode

    1. Dim instanz As New switchlib
    2. instanz.erstes_x = CInt(GroupBox1.Location.X)
    3. instanz.erstes_y = CInt(GroupBox1.Location.Y)
    habe wieder ein problem..weiß aber nicht, wie ich es lösen kann..verzweifel hier gleich schon :D


    also, ich habe in der library ein paar koordinaten deklariert:

    VB.NET-Quellcode

    1. Public Shared kood_eins_x As Double = 0
    2. Public Shared kood_eins_y As Double = 0
    3. Public Shared kood_zwei_x As Double = 0
    4. Public Shared kood_zwei_y As Double = 0


    danach wollte ich diesen koordinaten nen richtigen wert zuweisen..:

    VB.NET-Quellcode

    1. Function koordinaten_berechnen()
    2. 'braucht die groupboxnamen!
    3. kood_eins_x = element_eins.Location.X
    4. Return kood_eins_x
    5. kood_eins_y = element_eins.Location.Y
    6. Return kood_eins_y
    7. kood_zwei_x = element_zwei.Location.X
    8. Return kood_zwei_x
    9. kood_zwei_y = element_zwei.Location.Y
    10. Return kood_zwei_y
    11. kood_zwei_x = kood_eins_x + 6
    12. Return kood_zwei_x
    13. kood_zwei_y = kood_eins_y
    14. Return kood_zwei_y
    15. End Function



    in der form natürlich aufrufen..

    VB.NET-Quellcode

    1. switching.koordinaten_berechnen()



    doch jetzt kommt wieder der fehler wie zuvor und ein neuer..

    Quellcode

    1. Eine Ausnahme (erste Chance) des Typs "System.NullReferenceException" ist in switchen.exe aufgetreten.

    Quellcode

    1. Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.



    was mache ich falsch?

    schon mal danke für die vorherige antwort, hat super geklappt ;)
    Zeig uns mal deinen ganzen Code.

    Außerdem kannst du nicht mehrere Werte zurückgeben... nach Return wird die Methode verlassen.
    library:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class switchlibrary
    2. 'müssen in der anwendung genannt werden!!!!
    3. Public Shared element_eins As GroupBox
    4. Public Shared element_zwei As GroupBox
    5. Public Shared kood_eins_x As Double = 0
    6. Public Shared kood_eins_y As Double = 0
    7. Public Shared kood_zwei_x As Double = 0
    8. Public Shared kood_zwei_y As Double = 0
    9. Public Shared x_Fertig As Boolean
    10. Function koordinaten_berechnen()
    11. 'braucht die groupboxnamen!
    12. kood_eins_x = element_eins.Location.X
    13. Return kood_eins_x
    14. kood_eins_y = element_eins.Location.Y
    15. Return kood_eins_y
    16. kood_zwei_x = element_zwei.Location.X
    17. Return kood_zwei_x
    18. kood_zwei_y = element_zwei.Location.Y
    19. Return kood_zwei_y
    20. kood_zwei_x = kood_eins_x + 6
    21. Return kood_zwei_x
    22. kood_zwei_y = kood_eins_y
    23. Return kood_zwei_y
    24. End Function
    25. Function switchen()
    26. If kood_zwei_x <> kood_eins_x Then
    27. kood_eins_x -= 5
    28. kood_zwei_x += 5
    29. element_eins.Location = New Point(element_eins.Location.X = kood_eins_x, element_eins.Location.Y = kood_eins_y)
    30. element_zwei.Location = New Point(element_zwei.Location.X = kood_zwei_x, element_zwei.Location.Y = kood_zwei_y)
    31. x_Fertig = False
    32. Else
    33. x_Fertig = True
    34. End If
    35. Return x_Fertig
    36. End Function

    End Class



    schon mal danke, das du dir mühe machst ;)
    Dein Problem ist, dass du koordinaten_berechnen() oder switchen() aufrufst, bevor deine Variablen element_eins und element_zwei einen Verweis auf eine GroupBox enthalten.
    Dann weiß das Programm nicht, woher es Location.X/Y nehmen soll, und wirft dir eine Exception.

    Wie es funktionieren würde:

    VB.NET-Quellcode

    1. switchlibrary.element_eins = GroupBox1
    2. switchlibrary.element_zwei = GroupBox2 ' müssen sich natürlich auf dem Formular befinden
    3. ' dann könntest du switchlibrary.koordinaten_berechnen() und switchlibrary.switchen() aufrufen, wenn du die Funktionen als Public Shared deklarierst.
    ne, sollte eigentlich nicht das problem sein.. denn die werte werden im formular zugeordnet..

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. switchlibrary.element_eins = GroupBox1
    3. switchlibrary.element_zwei = GroupBox2
    4. switching.koordinaten_berechnen()
    5. End Sub



    es soll nämlich möglichst anpasspar sein :D

    aber muss ich die Return alle ans ende setzen?
    Du hast glaube ich OOP noch nicht so ganz verstanden.
    Mach deine koordinaten_berechnen()-Funktion Public Shared und rufe sie so auf: switchlibrary.koordinaten_berechnen()

    Zum Return:
    Nein, eine Funktion kann nur einen Wert zurückgeben.
    Wie hast du überhaupt vor, mehrere Werte auf einmal zu verarbeiten?
    es ist meine erst lib..habe vorher alles in die form gepackt..habe halt noch keine erfahrung - wie man bestimmt merkt..und im buch wird nix beschrieben..

    ich glaube ich hab meinen fehler gefunden, wenn ich es behoben habe, melde ich mich nochmal^^

    danke :D
    guck - du hast mich angeregt, mein Exception-tut um folgenden Absatz zu erweitern:

    Exception-Tut schrieb:

    Fragen zu Fehlern - ein paar einfache Regeln:
    • Name der Exception und MeldungsText angeben
    • Code-Ausschnitt posten
    • Fehlerzeile angeben


    meine Buchempfehlung: dieses Buch Lesen

    Da begründe ich auch, warums Galileio-Openbook Mist ist. Wenn die eine oder annere Aussage zu Galileio auch auf dein Buch zutrifft - dann isses wohl auch Mist.
    Mach Dir eine Projektmappe, in der Deine DLL und das Testprogramm dazu stehen. Dann kannst Du die DLL testen und die Umgebung zeigt Dir genau die Stelle, an der es knallt.
    Da kannst Du uns mit fundierten Informationen Dir helfen lassen. :thumbsup:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!