2011-01-07 10 views
2

nicht funktionieren Das Problem ist einfach, ich bin Codierung ein Werkzeug, das GPS-Geräte über die IO.Ports.SerialPort Funktion in .NETOdd Serialport-Namen, die

Alles funktioniert gut, eine Verbindung der Lage ist, aber alle aufzulisten verfügbare COM-Schnittstellen es wie folgt aussieht:

COM1 
COM2% 
COM3° 
COM12$ 

sein unmöglich zu einem Gerät zu verbinden, die COM3° genannt wird. Wenn ich einfach versuche, manuell mit COM3 zu verbinden, funktioniert es perfekt.

Dies ist der Code-Schnipsel, die ich jetzt bin mit:

For i As Integer = 0 To My.Computer.Ports.SerialPortNames.Count - 1 
     cbbCOMPorts.Items.Add(System.IO.Ports.SerialPort.GetPortNames(i)) 
Next 

Danke für Ihre Hilfe;)

+1

Ahm, warum benutzen Sie nicht einfach 'cbbCOMPorts.Items.AddRange ([System.IO.] SerialPort.GetPortNames())'? – Bobby

+0

Die Funktion führt auch in die Registrierung, 'HKEY_LOCAL_MACHINE \ HARDWARE \ DEVICEMAP \ SERIALCOMM', wenn diese ungeraden Namen drin sind (was ich glaube), dann könnte etwas mit Ihrem System nicht stimmen oder zusätzliche Software diese Namen geändert haben . – Bobby

+0

Das funktioniert, aber das Problem ist immer noch das gleiche ... Ich glaube nicht, dass irgendwas mit meinem System nicht stimmt, denn dieser Fehler erscheint auf jedem PC, den ich ausprobiert habe! –

Antwort

4

ich vorher gesehen habe, ist es schon eine Weile her. Dies ist ein Fehler im Treiber, er schreibt Junk in die Registry. Bobby hat dir den Ort gegeben, schau mal mit Regedit.exe. Irgendeine Art von USB-Gerät, stelle ich mir vor. Wirf es weg und finde einen anderen von einem anderen Hersteller. Cr * ppy Treiber ist nicht etwas, mit dem Sie umgehen wollen.

+0

hmm, ich habe den Standort in regedit überprüft, den Bobby oben geschrieben hat. Es gibt KEIN seltsames Symbol, jeder COM-Port ist korrekt aufgelistet ... –

+0

Es ist nicht immer leicht sichtbar, wenn der 0-String-Terminator fehlt. Verwenden Sie Datei + Exportieren in regedit und sehen Sie sich die erzeugte .reg-Datei an. Wenn das gut aussieht, importieren Sie es erneut und versuchen Sie GetPortNames() erneut. Wenn es jetzt funktioniert, weißt du, dass der Fahrer es vermasselt. –

2

Hilft die Information bei this Connect MSDN post?

Insbesondere sehe ich:

Danke dieses Problem gemeldet hat. Die Ursache dafür (RegistryKey.GetValue verarbeitet nicht korrekt mit nicht null terminierten Zeichenfolgedaten) wird für die nächste Version von .NET Framework behoben.

Grüße, Justin Van Patten

bearbeiten: Wie oben in den Kommentaren erwähnt, diese Verbindung und Ausgabe kann in einer existing Stackoverflow question finden.

+0

Schön von ihnen, auf das Schwert zu fallen. Aber das eigentliche Problem ist, dass der Treiber Zeichenfolgen schreibt, ohne sie zu beenden. Es ist ein klassischer "Off-by-One" -Bug in C-Code beim Arbeiten mit Strings. –

0

Dies ist ein weiterer Grund, .Net 4.0 bei der Verwendung von SerialPorts zu verwenden. Wahrscheinlich ist das größte Problem, USB-SerialPorts zu reparieren, die entfernt werden, wenn der Port offen ist, was zu vielen Problemen führt (ja, ich weiß, dass der Benutzer nicht soll ...).