Öffnen eines vorhandenen Projekts

  • VB.NET

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

    @Otti Sieh Dir die Deklarationen der Prozeduren an.
    Gibt es, abgesehen vom Datentyp und dem Parameternamen, zwischen den einzelnen Parametern weitere Unterschiede?
    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!
    @RodFromGermany
    Ja gibt es.
    In der Anleitung steht ja

    Quellcode

    1. bcnt
    muss 4 sein.
    Funktion ist da, bekomme nun meine Meldung das eine Kollision vorhanden ist

    Quellcode

    1. Dim ppsnr As Byte = 42
    2. Dim pRLength As Byte = 42
    3. retVal = rf_anticoll(icdev, 4, ppsnr, pRLength)
    4. If (retVal <> 0) Then
    5. infokartenanzahl.Text = "mehr als eine oder keine Karte vorhanden"
    6. Else
    7. infokartenanzahl.Text = "Kartenanzahl OK"
    8. End If

    aber das mit den Byte 42 wird mir nicht klar :S

    Genauso komme ich nicht dahinter wie ich die Seriennummer der Karte auslesen kann.
    Ich Ursprungscode steht es so

    Quellcode

    1. s1 = ""
    2. For i = 0 To b1 - 1
    3. s1 = s1 & VB.Right("00" & Hex(buf1(i)), 2)
    4. Next i
    5. tx_kh.Text = s1
    6. 'Select card
    7. i = rf_select(0, buf1(0), 4, b1)
    8. If (i <> 0) Then
    9. lb_info.Text = "Select card fail!"
    10. Exit Sub
    11. End If
    12. lb_info.Text = "Select card succeed!"

    Otti schrieb:

    Ja gibt es.
    Welche?
    Bitte zuerst diese Fragestellung behandeln.
    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!
    @RodFromGermany
    Moin
    Habe mir die Deklarationen nochmal angesehen.

    Quellcode

    1. ​Public Declare Function rf_anticoll Lib "DLLs\MasterRD.dll" (ByVal icdev As Short, ByVal bcnt As Byte, ByRef ppsnr As Byte, ByRef pRLength As Byte) As Integer

    Ich habe meine Datentypen (Short,Byte) und meine Parameternamen (icdev, bcnt usw).
    Dazwischen ist nix mehr.
    @Otti Es gibt da Buchstabenfolgen, die mit by anfangen.
    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!
    @Otti Sagen wir mal so:
    mit ByRef bekommst Du einen Wert zurück.
    Beantwortet das Deine Frage nach den 42?
    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!
    @RodFromGermany
    Ja denke schon, danke schön dafür.

    Würde gerne nochmal auf meine Frage von Post 22 zurück kommen, bzgl der Seriennummer der Karte, das ist mir noch nicht ganz klar, wie ich diese anzeigen lassen kann.
    Im Ursprungscode steht es wie folgt, sobald keine Karten Kollision ist:

    Quellcode

    1. 'Anticollision
    2. i = rf_anticoll(0, 4, buf1(0), b1)
    3. If (i <> 0) Then
    4. lb_info.Text = "Anticollision Fail!"
    5. Exit Sub
    6. End If
    7. s1 = ""
    8. For i = 0 To b1 - 1
    9. s1 = s1 & VB.Right("00" & Hex(buf1(i)), 2)
    10. Next i
    11. tx_kh.Text = s1
    12. 'Select card
    13. i = rf_select(0, buf1(0), 4, b1)
    14. If (i <> 0) Then
    15. lb_info.Text = "Select card fail!"
    16. Exit Sub
    17. End If
    18. lb_info.Text = "Select card succeed!"
    @Otti Jetzt wird es lustig.
    Der 3. Parameter der Prozedur rf_anticoll() ist wohl ein Array.
    Da musst Du die richtige Syntax herausfinden:
    Austausch von Daten zwischen einer VB.NET-exe und einer C-DLL, 32 und 64 Bit
    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!

    Otti schrieb:

    Wäre echt nett.
    Spezifiziere mal Inhalt und geschätzten Aufwand.
    Ein echt nett holt mich da nicht hinter dem Ofen vor.
    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!

    Otti schrieb:

    zeitlich nicht
    sondern den inhaltlichen.
    Nun habe ich aber die Hardware nicht. Und ohne die bringt das nicht den vollen Umfang.
    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!
    @RodFromGermany
    achso, sorry.
    Ja am besten wäre ein Abbild vom Ursprungscode.
    Auswahl des Ports und Baudrate.
    Anzeige der Seriennummer des NFC Karte.
    Verbindung, Schreiben und Lesen via Button jeweils.

    Das wäre natürlich das beste.

    Hardware hast du natürlich nicht, wobei Ich denke das bei jemand mit viel Erfahrung, es vermutlich an Hand des Ursprungscodes bestimmt klappt.
    @Otti Sieh Dir mal den Anfang dieses Threads an.
    Thema gelöst, oder?
    Und weil ich versucht habe, Dir zu helfen, lädtst Du mir nun Dein ganzes Problem auf.
    Nun kommst Du vom hundertsten ins tausendste und hast keine Ahnung.
    Die Kommunikation mit nativen DLLs ist so ne Sache, wie Du an den Arrays gesehen hast.
    Ohne Hardware kann ich das eben nicht testen.
    Eigentlich solltest Du das Problem zurückstellen und Dich mit Programmierung befassen.
    Ich denke mal, ich hab Dir schon genug geholfen, ohne dass Du es bemerkt hast. ;(
    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!
    @RodFromGermany
    Hey, habe es nun wie folgt zur Funktion gebracht, ist vermutlich nicht die beste Variante aber klappt ermal soweit in verbindung mit deiner *.dll



    Quellcode

    1. ​Public Class Form1
    2. Dim port, i, m, baud As Integer
    3. Dim KeyF As String = "FFFFFFFFFFFF"
    4. Dim j As Short
    5. Dim buf1(200) As Byte
    6. Dim buf2(200) As Byte
    7. Dim s1 As String
    8. Dim b2, b1, b3 As Byte
    9. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    10. datenblock.SelectedIndex = 4
    11. cPort.SelectedIndex = 3
    12. cBaudrate.SelectedIndex = 1
    13. End Sub
    14. Private Sub bVerbinden_Click(sender As Object, e As EventArgs) Handles bVerbinden.Click
    15. port = cPort.SelectedIndex + 1
    16. If (port = 0) Then
    17. lMeldung.Text = "Port auswählen!"
    18. End If
    19. baud = CInt(cBaudrate.Text)
    20. If (baud = 0) Then
    21. lMeldung.Text = "Baudrate auswählen!"
    22. End If
    23. 'Port öffnen
    24. i = rf_init_com(port, baud)
    25. If (i <> 0) Then
    26. lMeldung.Text = "Port fehlt!"
    27. Exit Sub
    28. End If
    29. 'Verbinden / Laden
    30. i = rf_request(0, &H52S, j)
    31. If (i <> 0) Then
    32. lMeldung.Text = "Fehler beim laden der Karte"
    33. Exit Sub
    34. End If
    35. 'Kollision und Kartennummer auslesen
    36. i = rf_anticoll(0, 4, buf1(0), b1)
    37. If (i <> 0) Then
    38. lMeldung.Text = "Karten Kollision"
    39. Exit Sub
    40. End If
    41. s1 = ""
    42. For i = 0 To b1 - 1
    43. s1 = s1 & VB.Right("00" & Hex(buf1(i)), 2)
    44. Next i
    45. tKartenSN.Text = s1
    46. 'Karte vollständig
    47. i = rf_select(0, buf1(0), 4, b1)
    48. If (i <> 0) Then
    49. lMeldung.Text = "Karten Fehler"
    50. Exit Sub
    51. End If
    52. lMeldung.Text = "Karte vollständig geladen"
    53. End Sub
    54. Private Sub bLesen_Click(sender As Object, e As EventArgs) Handles bLesen.Click
    55. m = datenblock.SelectedIndex
    56. b3 = CByte(m)
    57. s1 = Trim(KeyF)
    58. For i = 0 To 5
    59. buf1(i) = Val("&H" & Mid(s1, i * 2 + 1, 2))
    60. Next i
    61. i = rf_M1_authentication2(0, &H60S, b3, buf1(0))
    62. i = rf_M1_read(0, b3, buf2(0), b2)
    63. s1 = ""
    64. For i = 0 To b2 - 1
    65. s1 = s1 & VB.Right("00" & Hex(buf2(i)), 2)
    66. Next i
    67. tDaten.Text = s1
    68. End Sub
    69. Private Sub bSchreiben_Click(sender As Object, e As EventArgs) Handles bSchreiben.Click
    70. m = datenblock.SelectedIndex
    71. s1 = Trim(KeyF)
    72. For i = 0 To 5
    73. buf1(i) = Val("&H" & Mid(s1, i * 2 + 1, 2))
    74. Next i
    75. If (m = -1) Then
    76. lMeldung.Text = "Select Block Please!"
    77. Exit Sub
    78. End If
    79. s1 = Trim(tDaten.Text)
    80. If (Len(s1) <> 32) Then
    81. lMeldung.Text = "Falsche Datenlänge"
    82. tDaten.Focus()
    83. Exit Sub
    84. End If
    85. For i = 0 To 15
    86. buf2(i) = Val("&H" & Mid(s1, i * 2 + 1, 2))
    87. Next i
    88. 'Authentication
    89. b3 = CByte(m)
    90. i = rf_M1_authentication2(0, &H60S, b3, buf1(0))
    91. 'Write card
    92. i = rf_M1_write(0, b3, buf2(0))
    93. If (i <> 0) Then
    94. lMeldung.Text = "Zubeschreibende Karte fehlt"
    95. Exit Sub
    96. End If
    97. lMeldung.Text = "Schreiben OK"
    98. End Sub
    99. Private Sub bStop_Click(sender As Object, e As EventArgs) Handles bStop.Click
    100. i = rf_halt(0)
    101. If (i <> 0) Then
    102. lMeldung.Text = "Haltefehler"
    103. Exit Sub
    104. End If
    105. tKartenSN.Text = ""
    106. tDaten.Text = ""
    107. lMeldung.Text = "Halt OK"
    108. End Sub
    109. End Class


    Danke noch mal