vb net Wie erstelle ich eine DLL für einen Chat

  • VB.NET

Es gibt 88 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    Also, brauche ich nicht extra die Imports die ich bei der normalen Windows-Forms brauche?

    RodFromGermany schrieb:

    Hauptnamespace dieser DLL importieren

    Was meinst du bzw. wie kann ich das denn machen und was ist das?
    Wie man mich kontaktieren kann:
    thiemo-melhorn.de
    @Thiemo1991 408 Beiträge im Forum und noch nie einen Namespace importiert? :D
    Imports LEERZEICHEN und warten, was Dir die IDE anzeigt...
    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!
    @Thiemo1991 Hättest Du das nicht schneller ausprobiert als diesen Post geschrieben :?:
    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!
    gugge auch Video: HelperProjekt einbinden
    Ist zwar keine Chat-Dll, aber ansonsten genau das Thema.

    Ach - das Imports-Problem tritt dort leider nicht auf, weil meine Helpers ihren Code in allgemeinen Namespaces angesiedelt haben, der schon von vornherein im ZielProjekt importiert ist - mittels General-Import.

    Hilft nix: Mit selber Dll schreiben kannste erst anfangen, wenn du die Begriffe Namespace, Import, General-Import - wenn dir das bekannt ist.
    Hier, in Visual Studio - Empfohlene Einstellungen wird auch mit General-Importen umgegangen - vlt. wirds dann auch bisserl klarer.

    Dir muss halt die hierarchische Ordnung der logischen Struktur eines Proggis klar werden:
    Namespace, darin Klassen und Module, darin Methoden, Properties etc..

    Die logische Struktur ist oft anders als die physikalische Datei-Struktur, etwa eine Klasse kann in mehrere Dateien aufgeteilt sein. Oder man kann mehrere Klassen auch in eine Datei stopfen.
    Und Namespaces sind sogar meist über mehrere Dateien verteilt - sogar über mehrere Projekte (was bei Klassen nicht möglich ist).

    Diese Dinge (welcher Code in welcher Klasse, welche Klasse in welchem Namespace, welcher Namespace in welcher Datei "sichtbar" (importiert) ist - diese Verhältnisse werden durch die Schlüsselworte
    Namespace / End Namespace, Class / End Class und Imports, gesteuert, sowie über Verweise und General-Importe in den Projekteigenschaften

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    @ErfinderDesRades Jou.

    Thiemo1991 schrieb:

    muss ich das halt wissen.
    Ebenfalls Jou.
    Allerdings rate ich Dir, da etwas intensiv mit der Entwicklungsumgebung zu spielen.
    Erstell ein WinForms-Projekt, speichere dies als Projektmappe ab (das solltst Du stets tun).
    Zwischenschritt: Mach zwei Projekte, speichere eins als Projektmappe ab, das andere nicht. Sieh Dir im Explorer den Unterschied zwischen beiden Verzeichnissen an. Lösche diese beiden Projekte wieder.
    Füge der Projektmappe ein zweites Projekt hinzu: Datei => Hinzufügen => Neues Projekt ==> Klassenbibliothek.
    Füge dem WinForms-Projekt den Verweis auf das DLL-Projekt, nicht aber auf die DLL, hinzu.

    Gehe in den Code des Hauptfensters der WinForms-Anweisung, füge oben eine neue Zeile ein und tippe imports LEERZEICHEN:

    Den Rest hatten wir schon.
    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!
    @Thiemo1991 Was die Imports in der DLL selber angeht, lass einfach alle erstmal weg. Während du den Code schreibst, wird Visual Studio die benötigten selber hinzufügen. Und sollten welche unnütz sein, wird Visual Studio auch darauf hinweisen.

    Grüße
    Väinämö
    Ich habe mal einen Versuch unternommen mit diesem Code - ich weis nicht ob der auch wirklich so funktioniert - ich habe den Code den ich hier poste, in einer anderen Form auch schon hier rein gepostet.

    VB.NET-Quellcode

    1. ​Imports System.IO
    2. Imports System.Net.Sockets
    3. Imports System.Net
    4. Public Class server
    5. Public TcpListener As TcpListener
    6. Public TcpClient As New TcpClient
    7. Public IPEndPoint As IPEndPoint = New IPEndPoint(IPAddress.Any, 77)
    8. Public list As New List(Of Verbindung)
    9. Dim t As New Threading.Thread(AddressOf SendenZuAlleClients)
    10. Dim v As New Verbindung
    11. Public joint As String
    12. Dim tmp As String = ver.streamr.ReadLine
    13. Private ver As Object
    14. Public Structure Verbindung
    15. Dim NetworkStream As NetworkStream
    16. Dim StreamWriter As StreamWriter
    17. Dim StreamReader As StreamReader
    18. Dim Nutzername As String
    19. End Structure
    20. Private Sub SendenZuAlleClients(ByVal s As String)
    21. For Each verbindung As Verbindung In list
    22. Try
    23. verbindung.StreamWriter.WriteLine(s)
    24. verbindung.StreamWriter.Flush()
    25. Catch
    26. End Try
    27. Next
    28. End Sub
    29. Private Sub Verbindungsversuchsaufbau()
    30. TcpListener = New TcpListener(IPEndPoint)
    31. TcpListener.Start()
    32. While True ' wir warten auf eine neue verbindung...
    33. TcpClient = TcpListener.AcceptTcpClient
    34. v.NetworkStream = TcpClient.GetStream
    35. v.StreamReader = New StreamReader(v.NetworkStream)
    36. v.StreamWriter = New StreamWriter(v.NetworkStream)
    37. v.Nutzername = v.StreamReader.ReadLine ' falls das mit dem nick nicht gewünscht, auch diese zeile entfernen.
    38. list.Add(v) ' und fügen sie der liste der clients hinzu.
    39. t.Start(v)
    40. End While
    41. End Sub
    42. Private Sub HörenAufVerbindung(ByVal ver As Verbindung)
    43. Do
    44. Try
    45. Console.WriteLine(ver.Nutzername & ": " & tmp)
    46. SendenZuAlleClients(ver.Nutzername & ": " & tmp)
    47. Catch
    48. list.Remove(ver)
    49. Exit Do
    50. End Try
    51. Loop
    52. End Sub
    53. End Class


    Und wie kann ich so kleine Hilfstexte wie bei "TCPClient" erstellen? Ihr wisst bestimmt was ich damit meine.
    Wie man mich kontaktieren kann:
    thiemo-melhorn.de
    ehrlich gesagt weis ich nicht zu 100% was du meinst..
    geht es dir um das tooltip Control?
    sprich du hoverst über nen Button und bekommst einen netten Text angezeigt .
    und meinst du Kommentare im Source Code? die werden mit einem ' eingeleitet

    Thiemo1991 schrieb:

    ich weis nicht ob der auch wirklich so funktioniert


    Warum weißt du das nicht? Hast du den Code im Texteditor zusammen kopiert? Falls du VisualStudio nutzt, teste deinen Code doch einfach ...

    Kommentare (wie bei TCPClient) kann man mit ' machen. Aber sowas weiß man natürlich nicht, wenn man den kompletten Code zusammen kopiert.

    Wer macht den sowas?
    Dim StreamWriter As StreamWriter
    Public TcpListener As TcpListener
    Public TcpClient As New TcpClient
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    Thiemo1991 schrieb:

    Ihr wisst bestimmt was ich damit meine.
    Ist das DLL-Problem inzwischen gelöst?
    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!
    Ich habe mir den alten Code den ich damals kopiert habe, einfach wieder kopiert aber eigene Subs daraus gemacht.

    @Kameo, ich meine das:


    @RodFromGermany, fast ist es gelöst.
    Wie man mich kontaktieren kann:
    thiemo-melhorn.de

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

    Thiemo1991 schrieb:

    Und wie kann ich so kleine Hilfstexte wie bei "TCPClient" erstellen?



    Setze über die Klasse oder Methode drei Apostrophs ( ' ). Visual Studio sollte dann den Rest einfügen:

    VB.NET-Quellcode

    1. ''' <summary>
    2. '''
    3. ''' </summary>
    4. ''' <remarks></remarks>


    Bei Summary kannst Du dann die Beschreibung eintragen.
    Ich habe die DLL erstellt und möchte die gerne verwenden aber ich weis nicht wo, welche Sachen aufgerufen werden sollen/können. (Der ist nur bis jetzt mal der Server.)

    VB.NET-Quellcode

    1. ​Imports System.IO
    2. Imports System.Net.Sockets
    3. Imports System.Net
    4. Public Class server
    5. Public TcpListener As TcpListener
    6. Public TcpClient As New TcpClient
    7. Public IPEndPoint As IPEndPoint = New IPEndPoint(IPAddress.Any, 77)
    8. Public list As New List(Of Verbindung)
    9. Dim t As New Threading.Thread(AddressOf SendenZuAlleClients)
    10. Dim v As New Verbindung
    11. Public joint As String
    12. Dim tmp As String = ver.streamr.ReadLine
    13. Private ver As Object
    14. Public Structure Verbindung
    15. Dim NetworkStream As NetworkStream
    16. Dim StreamWriter As StreamWriter
    17. Dim StreamReader As StreamReader
    18. Dim Nutzername As String
    19. End Structure
    20. Private Sub SendenZuAlleClients(ByVal s As String)
    21. For Each verbindung As Verbindung In list
    22. Try
    23. verbindung.StreamWriter.WriteLine(s)
    24. verbindung.StreamWriter.Flush()
    25. Catch
    26. End Try
    27. Next
    28. End Sub
    29. Private Sub Verbindungsversuchsaufbau()
    30. TcpListener = New TcpListener(IPEndPoint)
    31. TcpListener.Start()
    32. While True ' wir warten auf eine neue verbindung...
    33. TcpClient = TcpListener.AcceptTcpClient
    34. v.NetworkStream = TcpClient.GetStream
    35. v.StreamReader = New StreamReader(v.NetworkStream)
    36. v.StreamWriter = New StreamWriter(v.NetworkStream)
    37. v.Nutzername = v.StreamReader.ReadLine ' falls das mit dem nick nicht gewünscht, auch diese zeile entfernen.
    38. list.Add(v) ' und fügen sie der liste der clients hinzu.
    39. t.Start(v)
    40. End While
    41. End Sub
    42. Private Sub HörenAufVerbindung(ByVal ver As Verbindung)
    43. Do
    44. Try
    45. Console.WriteLine(ver.Nutzername & ": " & tmp)
    46. SendenZuAlleClients(ver.Nutzername & ": " & tmp)
    47. Catch
    48. list.Remove(ver)
    49. Exit Do
    50. End Try
    51. Loop
    52. End Sub
    53. End Class
    Wie man mich kontaktieren kann:
    thiemo-melhorn.de
    Du fügst deinem neuen Projekt, wo du deine DLL verwenden willst, einen Verweis zu deiner DLL hinzu und hast dann ganz normal Zugriffe auf die DLL, IntlliSense wird dir da deine ganzen Deklaration vorschlagen aus deiner Dll
    Ihr versteht gerade anscheinend nicht mal mein Problem was ich nun habe. Ich versuche mein Problem nochmals zu beschreiben.

    Ich weis zwar wie man diese ins Programm importiert aber nicht wie man z.B. eine Konsolen-Anwendung dazu bringt dass der Server auch wirklich funktioniert (also wie man diese ganzen Sachen anspricht. Ich möchte das so haben mit der Konsolen-Anwendung, weil das kommt später auf meinen Linux Mint PC drauf und von dort aus wird der Server auch später laufen.
    Wie man mich kontaktieren kann:
    thiemo-melhorn.de