VB .net: structure nach byte array für DLL

Tensi

Mitglied
Hallo,

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
 
Zurück