Function return List of string aus dll

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Baumeister.

    Function return List of string aus dll

    Hallo,

    habe mir testhalber ein Tool gebastelt, um Werte aus einer XMl in z.B. meine Comboboxen einzulesen. Dies funktioniert wunderbar, wenn ich es innerhalb eines Forms verwende. Nun möchte ich die Function in eine externe dll auslagern, da ich diese in mehreren Programmen verwenden möchte. Hier macht er dann gar nichts mehr. Kann mir heir evtl. jemand einen Tip geben, woran es hakt? Hier mal mein Code
    Der Aufruf

    VB.NET-Quellcode

    1. Private
    2. Sub Button14_Click(sender As Object, e As EventArgs) Handles Button14.Click
    3. Dim mylist As New List(Of String)
    4. Class1.Liste(Node:="/ test /Contact", path:="C:\Users\XXX\Desktop\Requirements_Steuerungsoptionen.xml", val:="value")
    5. For Each item In mylist
    6. ComboBox3.Items.Add(item).ToString()
    7. Next
    8. End Sub

    Hier die Function in der dll

    VB.NET-Quellcode

    1. Public Shared Function Liste(ByVal Node As String, path As String, val As String)
    2. Dim mylist As New List(Of String)
    3. Dim XMLDoc As New XmlDocument
    4. Dim Knoten As XmlNode
    5. XMLDoc.Load(path)
    6. Dim Knotenliste As XmlNode = XMLDoc.SelectSingleNode(Node)
    7. For Each Knoten In Knotenliste
    8. mylist.Add(Knoten.Attributes("value").Value)
    9. Next
    10. Return mylist
    11. End Function


    Der einzige Unterschied, den ich gemacht habe ist, dass ich myList als public Variable nur einfach deklariert hatte in der einzelnen Form. Das geht ja so nicht mehr. Glaube ich zumindest.
    Vielen Dank vorab

    Viele Grüße
    Baumeister
    Mach mal Option Strict On in die erste Zeile deines Codes. Deine Funktion gibt nämlich gar nix zurück.

    Ändere

    VB.NET-Quellcode

    1. ​Public Shared Function Liste(ByVal Node As String, path As String, val As String)

    in

    VB.NET-Quellcode

    1. ​Public Shared Function Liste(ByVal Node As String, path As String, val As String) as List(of String)


    und

    VB.NET-Quellcode

    1. ​Class1.Liste(Node:="/ test /Contact", path:="C:\Users\XXX\Desktop\Requirements_Steuerungsoptionen.xml", val:="value")

    in

    VB.NET-Quellcode

    1. mylist = ​Class1.Liste(Node:="/ test /Contact", path:="C:\Users\XXX\Desktop\Requirements_Steuerungsoptionen.xml", val:="value")


    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    @Baumeister Und dies auch gleich:

    VB.NET-Quellcode

    1. For Each item In mylist
    2. ComboBox3.Items.Add(item).ToString()
    3. Next
    in

    VB.NET-Quellcode

    1. ComboBox3.Items.AddRange(mylist)
    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!
    Danke erstmal für die superschnellen Antworten,
    leider ist es so, dass er nach wie vor nichts macht. Beim Einzelschritt debuggen habe ich festgestellt, dass er in der dll die Schleife gar nicht durchläuft, sondern drüber geht. Somit wird mylist schon gar nicht gefüllt. Woran kann dies liegen?
    @Rod Wenn ich das mache, zeigt er mir, dass der Wert vom Typ "System.Collections.Generic.List(Of String)" kann nicht in "1-dimensionales Array von Object" konvertiert werden kann.
    Vielleicht habt Ihr ja noch ne Idee,
    Vielen Dank nochmal
    lg

    Baumeister schrieb:

    konvertiert
    Dann so:

    VB.NET-Quellcode

    1. ComboBox3.Items.AddRange(mylist.ToArray)
    Poste mal die XML-Datei (oder eine äquivalente).
    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!
    Ja natürlich an der xml kanns auch liegen. Die habe ich so bekommen. Hat zwar bei allem anderen immer funktioniert, aber sieht nicht normal aus.

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-16"?>
    2. <test>
    3. <Contact value=""></Contact>
    4. <Contact value="Hans Dampf"></Contact>
    5. <Contact value="Frieda Mustrermann"></Contact>
    6. <Contact value="Ernst Spassig"></Contact>
    7. <autostart value="1"></autostart>
    8. </test>

    Baumeister schrieb:

    Ja natürlich an der
    DLL lag es.

    VB.NET-Quellcode

    1. Dim Knotenliste As XmlNodeList = XMLDoc.SelectNodes(Node)
    muss es heißen.
    Hier mal der ganze Code (ohne explizite DLL):

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim path = "C:\Temp\Test.xml"
    3. Dim node = "test/Contact"
    4. Dim value = "value"
    5. Dim mylist = Liste(node, path, value)
    6. ComboBox3.Items.AddRange(mylist.ToArray)
    7. End Sub
    8. Public Shared Function Liste(ByVal Node As String, path As String, val As String) As List(Of String)
    9. Dim mylist As New List(Of String)
    10. Dim XMLDoc As New XmlDocument
    11. XMLDoc.Load(path)
    12. Dim Knotenliste As XmlNodeList = XMLDoc.SelectNodes(Node) ' Dies hier
    13. For Each Knoten As XmlNode In Knotenliste
    14. mylist.Add(Knoten.Attributes(val).Value)
    15. Next
    16. Return mylist
    17. End Function

    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!
    Bitte besser benamen, besonders wenns eine wiederverwendbare Dll werden soll

    VB.NET-Quellcode

    1. Public Shared Function SelectFromXmlFile(ByVal filePath As String, ByVal xPath As String, ByVal targetAttribute As String) As List(Of String)
    2. Dim XMLDoc As New XmlDocument
    3. XMLDoc.Load(filePath)
    4. Dim attribs = From xnd In XMLDoc.SelectNodes(xPath).Cast(Of XmlNode)() _
    5. Select xnd.Attributes(targetAttribute).Value
    6. Return attribs.ToList
    7. End Function

    Aber tatsächlich ist die Methode ganz überflüssig, denn es gibt für Xml eigene Abfrage-Ausdrücke (sog "xPath-Ausdrücke"), mit denen man auch die Attribute von XmlElementen direkt abruft.
    Noch unnötiger wird diese Methode, wenn man die VB-Xml-Achseneigenschaften einsetzt - gugge Xml verarbeiten mit Intellisense (Schema und XDocument)
    OK Danke,
    Ja der Name war nur so schnell gewählt. Wollte nur testen ob das geht. Habe es noch nirgends konkret geplant. Werde mir deinen weiteren Tip aber auch noch zu Gemüte führen.
    Danke
    Edit: bei diesem Problem ging es mir eher um das Übergeben der Liste von der dll an das Form.
    Trotzdem Danke

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Baumeister“ ()