Hallo alle miteinander,
ich bin neu im Bereich des Programmierens und arbeite momentan an einer Umprogramierung an einem USB-Gerät. Ziel ist, es dass dem Gerät über das ausführen eine Exe eine Zeichenfolge zugesendet wird, welches dieses in akustische Signale verwandelt. Hierfür hatte ich bereits den funktionierenden VBA-Code:
Private Declare Function TSLF_Open Lib "TS_LF_SDK.DLL" (ByRef Name As Byte, ByVal Baudrate As Long, ByVal ParityMode As Long, ByVal Timeout As Long) As Long
Private Declare Function TSLF_Close Lib "TS_LF_SDK.DLL" (ByVal PortHandle As Long) As Long
Private Declare Function TSLF_RawWrite Lib "TS_LF_SDK.DLL" (ByVal PortHandle As Long, ByRef Buffer As Byte, ByVal BufLen As Long) As Long
Private Sub Bestätigen1()
MaxLen = 255
ListLen = 0
Err = 0
Dim NamenListe(255) As Byte
Dim Buffer(100) As Byte
'Bestimmung des USB Gerätenamens, wenn sie diesen bereits kennen, können sie den auch fest einstellen
ListLen = TSLF_GetUSBDeviceNames(NamenListe(0), MaxLen)
If (ListLen > 1) Then
'Gerät öffnen
Handle = TSLF_Open(NamenListe(0), 19200, 0, 500)
'RawWrite mit 1 Byte mit Wert 7 ergibt einen Buzzer Ton
Buffer(0) = 7
Err = TSLF_RawWrite(Handle, Buffer(0), 1)
'Und wieder schließen, damit die Tastatureingabe wieder aktiv wird.
TSLF_Close (Handle)
End If
End Sub
Wenn ich jetzt den Code probiere nach VB zu übersetzen um eine lauffähige .exe zu erhalten bekomme ich in der Zeile Resultat = ... den Fehler AccessViolationException mit der Info: Zusätzliche Informationen: Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.
Der Code sieht wie folgt aus:
Module Module1
Private Declare Function TSLF_GetUSBDeviceNames Lib "TS_LF_SDK.DLL" (ByRef Buffer As Byte, ByVal nBufferSize As Long) As Long
Private Declare Function TSLF_Open Lib "TS_LF_SDK.DLL" (ByRef Name As Byte, ByVal Baudrate As Long, ByVal ParityMode As Long, ByVal Timeout As Long) As Long
Private Declare Function TSLF_Close Lib "TS_LF_SDK.DLL" (ByVal PortHandle As Long) As Long
Public Declare Function TSLF_RawWrite Lib "TS_LF_SDK.DLL" (ByVal PortHandle As Long, ByRef Buffer As Byte, ByVal BufLen As Long) As Long
'Funktion für die Buzzer Ausgabe: (Hier als Click auf eine Button, wie sie das machen liegt an ihnen)
Sub Main()
Dim MaxLen = 255
Dim ListLen As Integer
Dim NamenListe(255) As Byte
Dim Buffer(100) As Byte
Dim Resultat As Long
Dim Handle As Long
Dim len As Long
'Bestimmung des USB Gerätenamens, wenn sie diesen bereits kennen, können sie den auch fest einstellen
ListLen = TSLF_GetUSBDeviceNames(NamenListe(0), MaxLen)
If (ListLen > 1) Then
'Gerät öffnen
Handle = TSLF_Open(NamenListe(0), 19200, 0, 500)
'RawWrite mit 1 Byte mit Wert 7 ergibt einen Buzzer Ton
Buffer(0) = 7
len = 1
Resultat = TSLF_RawWrite(Handle, Buffer(0), len)
'Und wieder schließen, damit die Tastatureingabe wieder aktiv wird.
TSLF_Close(Handle)
End If
End Sub
End Module
Kann mir da jemand helfen? Die DLL-Dateien habe ich als Dateihänge hinzugefügt.
ich bin neu im Bereich des Programmierens und arbeite momentan an einer Umprogramierung an einem USB-Gerät. Ziel ist, es dass dem Gerät über das ausführen eine Exe eine Zeichenfolge zugesendet wird, welches dieses in akustische Signale verwandelt. Hierfür hatte ich bereits den funktionierenden VBA-Code:
Private Declare Function TSLF_Open Lib "TS_LF_SDK.DLL" (ByRef Name As Byte, ByVal Baudrate As Long, ByVal ParityMode As Long, ByVal Timeout As Long) As Long
Private Declare Function TSLF_Close Lib "TS_LF_SDK.DLL" (ByVal PortHandle As Long) As Long
Private Declare Function TSLF_RawWrite Lib "TS_LF_SDK.DLL" (ByVal PortHandle As Long, ByRef Buffer As Byte, ByVal BufLen As Long) As Long
Private Sub Bestätigen1()
MaxLen = 255
ListLen = 0
Err = 0
Dim NamenListe(255) As Byte
Dim Buffer(100) As Byte
'Bestimmung des USB Gerätenamens, wenn sie diesen bereits kennen, können sie den auch fest einstellen
ListLen = TSLF_GetUSBDeviceNames(NamenListe(0), MaxLen)
If (ListLen > 1) Then
'Gerät öffnen
Handle = TSLF_Open(NamenListe(0), 19200, 0, 500)
'RawWrite mit 1 Byte mit Wert 7 ergibt einen Buzzer Ton
Buffer(0) = 7
Err = TSLF_RawWrite(Handle, Buffer(0), 1)
'Und wieder schließen, damit die Tastatureingabe wieder aktiv wird.
TSLF_Close (Handle)
End If
End Sub
Wenn ich jetzt den Code probiere nach VB zu übersetzen um eine lauffähige .exe zu erhalten bekomme ich in der Zeile Resultat = ... den Fehler AccessViolationException mit der Info: Zusätzliche Informationen: Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.
Der Code sieht wie folgt aus:
Module Module1
Private Declare Function TSLF_GetUSBDeviceNames Lib "TS_LF_SDK.DLL" (ByRef Buffer As Byte, ByVal nBufferSize As Long) As Long
Private Declare Function TSLF_Open Lib "TS_LF_SDK.DLL" (ByRef Name As Byte, ByVal Baudrate As Long, ByVal ParityMode As Long, ByVal Timeout As Long) As Long
Private Declare Function TSLF_Close Lib "TS_LF_SDK.DLL" (ByVal PortHandle As Long) As Long
Public Declare Function TSLF_RawWrite Lib "TS_LF_SDK.DLL" (ByVal PortHandle As Long, ByRef Buffer As Byte, ByVal BufLen As Long) As Long
'Funktion für die Buzzer Ausgabe: (Hier als Click auf eine Button, wie sie das machen liegt an ihnen)
Sub Main()
Dim MaxLen = 255
Dim ListLen As Integer
Dim NamenListe(255) As Byte
Dim Buffer(100) As Byte
Dim Resultat As Long
Dim Handle As Long
Dim len As Long
'Bestimmung des USB Gerätenamens, wenn sie diesen bereits kennen, können sie den auch fest einstellen
ListLen = TSLF_GetUSBDeviceNames(NamenListe(0), MaxLen)
If (ListLen > 1) Then
'Gerät öffnen
Handle = TSLF_Open(NamenListe(0), 19200, 0, 500)
'RawWrite mit 1 Byte mit Wert 7 ergibt einen Buzzer Ton
Buffer(0) = 7
len = 1
Resultat = TSLF_RawWrite(Handle, Buffer(0), len)
'Und wieder schließen, damit die Tastatureingabe wieder aktiv wird.
TSLF_Close(Handle)
End If
End Sub
End Module
Kann mir da jemand helfen? Die DLL-Dateien habe ich als Dateihänge hinzugefügt.