Eine DLL erstellt und darauf zugreifen in vb.net

  • Sonstige

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

    Eine DLL erstellt und darauf zugreifen in vb.net

    Hallo
    Ich habe gestern eine DLL erstellt mit mehreren Funktionen und Subs. Diese habe ich dann in einer anderen Solution eingebunden(Verweis und Import...) und ich konnte wunderbar auf die Methoden der DLL zugreifen. Heute habe ich die DLL erweitert mit neuen Funktionen und Subs. Leider kann ich auf die neuen Methoden nicht zugreifen. Warum nicht? Ich habs schon mit Projektmappe neu erstellen und Bereinigen bei der DLL wie auch bei der anderen Solution versucht, es geht leider nicht.

    Quellcode

    1. Imports Allgemein.Allgemein
    2. Module Module1
    3. Sub Main()
    4. Dim myDll As New dtFunctions
    5. Dim cBla As bla = New bla
    6. Dim sTest As String = "Arno ist ein Held!!!"
    7. myDll.checkFolderExist("", False, sTest)
    8. myDll.log("jetzt geht es")
    9. myDll.Test()
    10. myDll.xyz()
    11. MsgBox(sTest)
    12. cBla.Kalle()
    13. 'myDll.arno() FEHLER
    14. End Sub
    15. End Module


    Quellcode

    1. Imports System.IO
    2. Namespace Allgemein
    3. Public Class dtFunctions
    4. Dim set1 As DataSet = New DataSet("office")
    5. Dim table1 As DataTable = New DataTable("patients")
    6. Dim table2 As DataTable = New DataTable("medications")
    7. Dim bConfigLogging As Boolean = True
    8. Dim sClassName As String = Me.GetType.FullName
    9. Public Function neueFunction()
    10. Dim i As Integer = 99
    11. Return i
    12. End Function
    13. Public Function checkFolderExist(ByVal sFolder As String, ByVal bCreate As Boolean, ByRef sLogTest As String) As Boolean
    14. Try
    15. If sFolder.Length = 0 Then
    16. sLogTest = "Kein Ordername übergeben (checkFolderExist) "
    17. Return False
    18. End If
    19. If Directory.Exists(sFolder) = False Then
    20. If bCreate Then
    21. Directory.CreateDirectory(sFolder)
    22. sLogTest = "Der Ordner " & sFolder & " war nicht vorhanden und ist angelegt worden!"
    23. Return True
    24. Else
    25. sLogTest = "Der Ordner " & sFolder & " ist nicht vorhanden!"
    26. Return False
    27. End If
    28. Else
    29. sLogTest = "Der Ordner " & sFolder & " ist vorhanden!"
    30. Return True
    31. End If
    32. Catch ex As Exception
    33. sLogTest = "Fehler (checkFolderExist): " & ex.Message
    34. Return False
    35. End Try
    36. End Function
    37. Public Function xyz()
    38. Return ""
    39. End Function
    40. Public Function log(ByVal sMessage As String) As String
    41. If bConfigLogging = False Then
    42. Return ""
    43. Exit Function
    44. End If
    45. Dim sDateTimeSpezial As String
    46. sDateTimeSpezial = Year(Now) & "." & Month(Now) & "." & Microsoft.VisualBasic.DateAndTime.Day(Now) & " - " & Hour(Now) & ":" & Minute(Now) & ":" & Second(Now) & " "
    47. Try
    48. Dim fsLog As FileStream = New FileStream(System.AppDomain.CurrentDomain.BaseDirectory & "AllgemeinDLL_Log" & "_" & DateTime.Now.Year.ToString() & "_" & DateTime.Now.Month.ToString() & ".log", FileMode.Append, FileAccess.Write, FileShare.Write)
    49. 'Dim fsLog As FileStream = New FileStream("Logs\\" & "Allgemein" & "_" & DateTime.Now.Year.ToString() & "_" & DateTime.Now.Month.ToString() & "_DataTaker.log", FileMode.Append, FileAccess.Write, FileShare.Write)
    50. 'fsLog =
    51. Dim myfsWriter As New BinaryWriter(fsLog)
    52. myfsWriter.Write(sDateTimeSpezial & sMessage.ToCharArray & vbCrLf)
    53. myfsWriter.Close()
    54. fsLog.Close()
    55. Catch ex As Exception
    56. Return ""
    57. End Try
    58. Return ""
    59. End Function
    60. Public Sub Test()
    61. MsgBox("Test")
    62. End Sub
    63. Public Sub arno()
    64. End Sub
    65. Public Property pds() As DataSet
    66. Get
    67. Return set1
    68. End Get
    69. Set(value As DataSet)
    70. ' Two DataTables.
    71. table1.Columns.Add("name")
    72. table1.Columns.Add("id")
    73. table1.Rows.Add("sam", 1)
    74. table1.Rows.Add("mark", 2)
    75. table2.Columns.Add("id")
    76. table2.Columns.Add("medication")
    77. table2.Rows.Add(1, "atenolol")
    78. table2.Rows.Add(2, "amoxicillin")
    79. ' Create a DataSet. Put both tables in it.
    80. set1.Tables.Add(table1)
    81. set1.Tables.Add(table2)
    82. End Set
    83. End Property
    84. End Class
    85. Public Class bla
    86. Dim sTest As String = ""
    87. Public Function checkFolderExist(ByVal sFolder As String, ByVal bCreate As Boolean, ByRef sLogTest As String) As Boolean
    88. Try
    89. If sFolder.Length = 0 Then
    90. sLogTest = "Kein Ordername übergeben (checkFolderExist) "
    91. Return False
    92. End If
    93. If Directory.Exists(sFolder) = False Then
    94. If bCreate Then
    95. Directory.CreateDirectory(sFolder)
    96. sLogTest = "Der Ordner " & sFolder & " war nicht vorhanden und ist angelegt worden!"
    97. Return True
    98. Else
    99. sLogTest = "Der Ordner " & sFolder & " ist nicht vorhanden!"
    100. Return False
    101. End If
    102. Else
    103. sLogTest = "Der Ordner " & sFolder & " ist vorhanden!"
    104. Return True
    105. End If
    106. Catch ex As Exception
    107. sLogTest = "Fehler (checkFolderExist): " & ex.Message
    108. Return False
    109. End Try
    110. End Function
    111. Public Function xxx() As Boolean
    112. Dim a As Integer = 0
    113. Return True
    114. End Function
    115. Public Sub Kalle()
    116. MsgBox("Hallo aus Kalle")
    117. End Sub
    118. Public Sub neueSub()
    119. MsgBox("Hallo aus neue Sub")
    120. End Sub
    121. End Class
    122. End Namespace

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

    Das klingt, als wären die nicht als Public deklariert.
    Wo liegt denn die importierte DLL rum? Wurde die Datei tatsächlich aktualisiert?

    Danke fürs nachträgliche Hinzufügen des Quellcodes. Damit hat sich Frage 1 erledigt.
    An manchen Tagen gibt es zu allem Überfluss auch noch Ärger!

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

    Rainman schrieb:

    Das klingt, als wären die nicht als Public deklariert.
    Wo liegt denn die importierte DLL rum? Wurde die Datei tatsächlich aktualisiert?


    alle Funktionen und Subs sind doch Publik

    ich hab den Verweis auf die DLL aus diesem Ordner gemacht
    C:\Users\TestUser\Documents\Visual Studio 2012\Projects\Allgemein\Allgemein\bin\Debug
    ich habe es nun herausgefunden

    bei meiner dll habe ich bei den allgemeinen einstellungen unter kompilieren den ordner Release eingestellt
    leider muss man dann die dll immer "starten", dann kommt ne fehlermeldung, dass eine dll nich gestartet werden kann, aber im release ordner steh die aktuelle dll
    in meinem testprogramm habe ich den alten verweiss gelöscht und bin jetzt auf den Release - Ordner der DLL gegangen
    so funktioniert es auf jeden fall

    Gibts eine möglichkeit, zu komplieren, ohne auf den Button Starten zu klicken im Visual Studio?(Express 2012)

    Auch das hab ich selber rausgefunden: F7 oder Projektmappe erstellen

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

    Willkommen im Forum. :thumbup:

    samosnabrueck schrieb:

    ich hab den Verweis auf die DLL aus diesem Ordner gemacht
    Wenn Du den Code der SLL selbst hast, dafst Du nicht die DLL dem anderen Projekt als Verweis hinzufügen, sondern das DLL-Projekt selbst. Dann macht das Studio die Einstellungen Debug / Release sowie x86 / x64 / AnyCPU für Dich.
    Außerdem kannst Du den Code der DLL debuggen.
    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!