Auf Wert aus DLL zugreifen.

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von optz.

    Auf Wert aus DLL zugreifen.

    Hi,

    Ich habe eine wahrscheinlich blöde Frage.
    Kann man aus einem Sub in einer DLL (selbst erstellt) auf einen Wert zugreifen bzw. kann der Sub einen wert Zurückgeben ohne das er seine derzeitige Aufgabe abbricht, weil mit Return und einer Function geht es ja nicht oder kann man verhindern das Return die Prozedur beendet?

    Vielen dank für die Hilfe und sorry für den sehr verschachtelten Satz.

    MfG
    optz
    Das widerspricht vollkommen der Definition einer Funktion. Sobald was zurückgegeben wird, ist die Funktion beendet - fertig. Man kann nicht zwischendrin was zurückgeben, wie denn auch, wenn der Programmfluss ja gerade in der Funktion ist.
    Die einzige Möglichkeit, überhaupt so was ähnliches hinzubekommen, wäre Threading, denn dann kann auch was passieren, während die Funktion ausgeführt wird. Also so ne Art Fortschrittsbenachrichtigung, da wird aber nichts zurückgegeben, sowas regelt man dann normalerweise über Events.
    EDIT, da die Guidelinepolizeit (aka Artentus) Verbesserungen beantragt hat:
    (Orginal)

    VB.NET-Quellcode

    1. Module Module1
    2. Private WithEvents _InDeinerDLL As New InDeinerDLL() 'Instanzieren
    3. Sub Main()
    4. _InDeinerDLL.DoStuff()
    5. End Sub
    6. Private Sub Schritt1Fertig(data As Integer) Handles _InDeinerDLL.Step1Ready
    7. Console.WriteLine(data) 'Mach irgendwas mit den Daten
    8. End Sub
    9. End Module
    10. Class InDeinerDLL
    11. Event Step1Ready(data As Integer)
    12. Sub DoStuff()
    13. Threading.Thread.Sleep(1000) 'Tu was aufwändiges
    14. RaiseEvent Step1Ready(12345) 'Schritt 1 fertig
    15. Threading.Thread.Sleep(1500) 'Tu was aufwändiges
    16. 'etc.
    17. End Sub
    18. End Class


    So was vl.? No C&P, pls.


    Schönerer Code:

    VB.NET-Quellcode

    1. Module Module1
    2. WithEvents _InDeinerDLL As New InDeinerDLL() 'Instanzieren
    3. Sub Main()
    4. _InDeinerDLL.DoStuff()
    5. End Sub
    6. Private Sub Schritt1Fertig(sender As Object, e As InDeinerDLL.DoStuffEventArgs) Handles _InDeinerDLL.Step1Ready
    7. Console.WriteLine(e.data) 'Mach irgendwas mit den Daten
    8. End Sub
    9. End Module
    10. Class InDeinerDLL
    11. Event Step1Ready(sender As Object, e As DoStuffEventArgs)
    12. Sub DoStuff()
    13. Threading.Thread.Sleep(1000) 'Tu was aufwändiges
    14. RaiseEvent Step1Ready(Me, New DoStuffEventArgs(12345)) 'Schritt 1 fertig
    15. Threading.Thread.Sleep(1500) 'Tu was aufwändiges
    16. 'etc.
    17. End Sub
    18. Class DoStuffEventArgs
    19. Inherits EventArgs
    20. Sub New(_data As Integer)
    21. data = _data
    22. End Sub
    23. Public data As Integer
    24. End Class
    25. End Class

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „BjöNi“ ()