Zum Inhalt springen

Kompilierung fehlgeschlagen oder was? bitte helft mir


Gast monyplaba

Empfohlene Beiträge

Gast monyplaba

Hallo,

ich habe ein Programm in VB .NET erstellt das mir dazu hilft Daten an

meinem per USB angeschlossenem Gerät zu senden bzw. empfangen!

wenn ich es in der IDE Microsoft Visual Basic 2005 Express kompiliere

und teste funktioniert die Kommunikation wunderbar

aber wenn ich die .exe Datei im Ordner bin/release oder bin/Debug benutze um das

Programm zu testen dann hängt es an der Stelle wo ich mit meinem Gerät

kommunizieren möchte und zwar bei der Funktion "deviceiocontrol()"!

an der stelle passiert einfach nichts was wohl heißt dass das programm

darauf wartet dass mein gerät daten schickt was aber nie passiert und

ich muß dann das Programm abbrechen!

was könnte der Grund sein dass mein Programm innnerhalb der

entwicklungsumgebung wunderbar funktioniert und außerhalb nicht?

Danke für eure Hilfe

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gast monyplaba

es ist eigentlich so:

gibt es allgemein Probleme mit dem Typ microsoft.win32.SafeFileHandles

in Windows?

denn wenn ich versuche meine .exe datei in ordner release oder debug auszuführen bekomme ich win32 error: "error invalid Handle" nach dem befehl

"WriteFile"

////WriteFile////

Public Declare Auto Function WriteFile Lib "kernel32.dll" _

(ByVal hFile As SafeFileHandle, _

ByVal lpBuffer As Byte(), ByVal nNumberOfBytesToWrite As Integer, _

ByRef lpNumberOfBytesWritten As Integer, _

ByRef lpOverlapped As IntPtr) As Boolean

wenn ich es aber in der IDE ausführe dann läuft alles hervorragend

was kann denn das bedeuten?

Link zu diesem Kommentar
Auf anderen Seiten teilen

ich denke weniger dass das problem an der Windows API liegt, sonder viel eher an dir bzw an deiner implementation.

Aber im bezug auf die API kann ich nicht viel sagen da ich davon nicht sonderlich viel ahnung habe.

Zu deiner Implementation auch nicht, da sinnvolle stellen aus deinem Code fehlen.

Ich denke wenn du ein par wichtige Passagen postest, wirst du eher eine sinnvolle Antwort erhalten, sind doch einige hier die von dem API-Krams ne Ahnung haben.

Aber was ich mir als mögliche Uhrsache vorstellen kann, ist das du sicherlich von der API ein Handle bekommst um auf dein USB teil zuzugreifen.

Wenn du nun den Handle abfragst, und dann damit arbeitest kann der Fehler daher rühren das du im Debug automatisch die nötige zeit wartes bis Windows "so weit ist" aber in der Laufzeit läuft dein Programm Windows einfach davon und so hast du evtl ein ungültigen Handle mit dem du auf dein USB-Teil zugreifst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gast monyplaba

ja ich habe beides ausprobiert

wenn ich SafeFileHandle benutze ist IsInvalid = False

wenn ich Intptr benutze ist der Wert so um die 982

und das alles gleich nach CreateFile und gleich vor WriteFile

also heißt es CreateFile klappt! das ist der Fall außerhalb und innerhalb der IDE nur außerhalb der IDE bekomme ich nach WriteFile den error "Invalid Handle"! ich weiß was beim debugging schiefgelaufen

denn so wie es aussieht funktioniert mein programm nur mit debugging

was könnte das für einen grund haben?

Danke

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gast monyplaba

das funktioniert nicht wenn ich ohne Debugger teste aus der IDE oder in der IDE in Release Modus

ich habe noch was gemerkt

das ist mein alter Aufruf von WriteFile

Dim bool As Integer = WriteFile(hDevice, aPacket, aPacket.Length - 1, theBytesReturned, Nothing)

wenn ich es durch diesen ersetzte

Dim bool As Integer = WriteFile(hDevice, aPacket, aPacket.Length - 1, theBytesReturned, IntPtr.Zero)

also wenn ich Nothing durch Intptr.zero,

dann bekomme ich die gleiche Fehlermeldung "Invalid Handle" sowohl außer als auch in der IDE

was hat denn das zu bedeuten?

Link zu diesem Kommentar
Auf anderen Seiten teilen

was hat denn das zu bedeuten?
Das muss gar nichts bedeuten. Wenn wirklich ein Timingproblem vorliegt, kannst du aus solchen Beobachtungen nicht viel folgern.

Setz doch mal ein taktisches Sleep zwischen CreateFile und WriteFile.

Was für ein Gerät ist das denn? Gibt es eine Dokumentation des Treibers? Was macht dein Programm währenddessen sonst noch so?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gast monyplaba

das ist mein code ab createfile bis writefile" nach createfile ermittelt er mit deviceiocontrol die usb packet size dass ich brauche um daten zu schicken

dass mit dem sleep habe ich noch nicht ausprobiert! wie soll es denn aussehen?

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)

//das ist die methode sendpacket

Public Sub SendPacket(ByVal aPacket As Byte())

Dim theBytesReturned As Integer

Dim bool As Integer = WriteFile(hDevice, aPacket, aPacket.Length - 1, theBytesReturned, IntPtr.Zero)

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gast monyplaba
Das muss gar nichts bedeuten. Wenn wirklich ein Timingproblem vorliegt, kannst du aus solchen Beobachtungen nicht viel folgern.

Setz doch mal ein taktisches Sleep zwischen CreateFile und WriteFile.

Was für ein Gerät ist das denn? Gibt es eine Dokumentation des Treibers? Was macht dein Programm währenddessen sonst noch so?

das ist ein navigationsgerät von garmin

streetpilot 2720! ja es gibt auch eine dokumentation! ohne die hätte ich überhaupt nicht den ganzen code geschrieben!

aber da finde ich wohl nicht die lösung für mein problem! glaube ich zumidest

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gast monyplaba

das problem habe ich doch lösen können

ich hätte den letzten parameter von WriteFile als ByVal und nicht ByRef definieren sollen

Danke für deine Hilfe

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...