Forum: PC-Programmierung Handle mal ungültig mal nicht!


von astrid (Gast)


Lesenswert?

Hallo,
ich arbeite an einem programm das mir helfen soll daten an meinem per
usb angeschlossenem gerät zu schicken

wenn ich es in der IDE von Microsoft Visual Basic 2005 teste ist alles
in Ordnung
wenn ich aber die exe datei im debug (geschweige denn release) ordner
benutze dann liefert WriteFile ("error invalid handle") obwohl
CreateFile eine gültige Handle liefert in beiden Fällen

es funktioniert anscheinend nur mir debugging
weiß jemand warum bzw wie ich das lösen kann? Danke

hier ein snippset von meinem code

        hDevice = CreateFile(devicePath, GENERIC_READ Or GENERIC_WRITE,
0, 0&, OPEN_EXISTING, 0&, 0&)

        'Get the USB packet size, which we need for sending packets
        If DeviceIoControl(hDevice, IOCTL_USB_PACKET_SIZE, IntPtr.Zero,
0, usbpacketsize, 4, theBytesReturned, IntPtr.Zero) Then
            If theBytesReturned > 0 Then
                Dim bytes1() As Byte

                bytes1 = New Byte(theBytesReturned - 1) {}

                Marshal.Copy(usbpacketsize, bytes1, 0,
theBytesReturned)

                If theBytesReturned = 2 Then
                    usb_packet_size = BitConverter.ToInt16(bytes1, 0)
                End If
            End If
        Else
            Marshal.FreeHGlobal(ip)
            Return
        End If

        'send the startsessionpacket
        SendPacket(theStartSessionPacket)

        'get the ok from the device
        Do
            thePacket = GetPacket()

            If thePacket(0) = 0 And thePacket(4) =
USBProtocolPacketID.Pid_Session_Started Then Exit Do
        Loop

    Public Sub SendPacket(ByVal aPacket As Byte())
        Dim theBytesReturned As Integer

///////////////Scheitert hier wenn ich außerhalb der IDE
teste///////////
        Dim bool As Integer = WriteFile(hDevice, aPacket,
aPacket.Length, theBytesReturned, Nothing)

        If bool = INVALID_HANDLE_VALUE Or bool = 0 Then
            DisplayLastWin32Error()
            theDevInfo = IntPtr.Zero
            Return
        End If

        'If the packet size was an exact multiple of the USB packet
        'size, we must make a final write call with no data
        If usb_packet_size <> 0 Then
            If (aPacket.Length Mod usb_packet_size = 0) Then
                Dim newBytes() As Byte
                newBytes = New Byte() {}
                WriteFile(hDevice, newBytes, 0, theBytesReturned,
IntPtr.Zero)
            End If
        End If
    End Sub

von astrid (Gast)


Lesenswert?

das problem hat sich wohl erledigt

es lag an dem letzten parameter von WriteFile den ich als ByRef
definiert hatte und als Byval hätte lieber definieren sollte

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.