Hallo,
hab ein großes Problem bei dem ich nicht mehr weiter komme ...
Benutze eine USB Treiber DLL, dessen Aufruf so aussieht:
Das send_buf(64) array möchte ich ersetzen durch eine Struktur/Union:
(data, len, data (=62 byte) sollen mit byte (=64 byte) "überlappen")
Der Aufruf (... so dachte ich) sieht so aus:
Bekomme immer Fehlermeldungen: Eine Ausnahme (erste Chance) des Typs "System.NullReferenceException" ist in Booster.exe aufgetreten.
Die Funktion SendReceivePacket sieht so aus:
Vlt. hat jemand eine Idee, was ich falsch gemacht habe ...
(bin erst kürzlich von VB6 auf .net umgestiegen)
Vielen Dank schon im Voraus für Eure Hilfe
Daniel
hab ein großes Problem bei dem ich nicht mehr weiter komme ...
Benutze eine USB Treiber DLL, dessen Aufruf so aussieht:
Code:
Dim send_buf(64) As Byte
Dim receive_buf(64) As Byte
SendReceivePacket(send_buf, 2, receive_buf, RecvLength, 1000, 1000)
Das send_buf(64) array möchte ich ersetzen durch eine Struktur/Union:
Code:
<StructLayout(LayoutKind.Explicit, Pack:=1, Size:=64)> Public Structure USB_data
<FieldOffset(0)> Public command As Byte
<FieldOffset(1)> Public len As Byte
<FieldOffset(2)> Public data() As Byte
<FieldOffset(0)> Public bytes() As Byte
End Structure
(data, len, data (=62 byte) sollen mit byte (=64 byte) "überlappen")
Code:
Public USB_RX_data As USB_data
Public USB_TX_data As USB_data
Der Aufruf (... so dachte ich) sieht so aus:
Code:
SendReceivePacket(USB_TX_data.bytes, 2, USB_RX_data.bytes, RecvLength, 1000, 1000)
Bekomme immer Fehlermeldungen: Eine Ausnahme (erste Chance) des Typs "System.NullReferenceException" ist in Booster.exe aufgetreten.
Die Funktion SendReceivePacket sieht so aus:
Code:
Function SendReceivePacket(ByRef SendData() As Byte, ByRef SendLength As Integer, ByRef ReceiveData() As Byte, ByRef ReceiveLength As Integer, ByVal SendDelay As Integer, ByVal ReceiveDelay As Integer) As Integer
Dim SentDataLength As Integer
Dim ExpectedReceiveLength As Integer
Dim x As System.Runtime.InteropServices.Marshal
ExpectedReceiveLength = ReceiveLength
If (USB_TX_pipe <> INVALID_HANDLE_VALUE And USB_RX_pipe <> INVALID_HANDLE_VALUE) Then
If (USB_write(USB_TX_pipe, x.UnsafeAddrOfPinnedArrayElement(SendData, 0).ToInt32(), SendLength, SentDataLength, SendDelay) = SUCCESS) Then
If (USB_read(USB_RX_pipe, x.UnsafeAddrOfPinnedArrayElement(ReceiveData, 0).ToInt32(), ExpectedReceiveLength, ReceiveLength, ReceiveDelay) = SUCCESS) Then
If (ReceiveLength = ExpectedReceiveLength) Then
SendReceivePacket = 1 '// Success!
Exit Function
ElseIf (ReceiveLength < ExpectedReceiveLength) Then
SendReceivePacket = 2 '// Partially failed, incorrect receive length
Log("incorrect receive length")
Exit Function
End If
Else
CheckInvalidHandle()
End If
Else
CheckInvalidHandle()
End If
End If
SendReceivePacket = 0 '// Operation Failed
Log("Operation Failed")
End Function
Vlt. hat jemand eine Idee, was ich falsch gemacht habe ...
(bin erst kürzlich von VB6 auf .net umgestiegen)
Vielen Dank schon im Voraus für Eure Hilfe
Daniel