Benutzer mit den meisten Antworten
Threadende in VB

Frage
-
Hallo Gemeinde, was mach' ich bitte mit dieser Fehlermeldung?
ich sende Daten über eine RS232/USB Schnittstelle und will Daten empfangen. Oft geht es ganz gut, aber ab und zu kommt diese Meldung.
Kann mir bitte jemand helfen? Vielen Dank
Gruß - Walter
wafest42
Antworten
-
Hallo Walter,
der Stacktrace wäre zwar u. U. hilfreich - aber vermutlich stolperst Du über das Problem,
das der Beitrag http://zachsaw.blogspot.de/2010/07/net-serialport-woes.html behandelt.Eine Lösung (in C#) findet sich unter: http://zachsaw.blogspot.de/2010/07/serialport-ioexception-workaround-in-c.html. Solltest Du Probleme haben, es in VB.NET zu übersetzen, melde Dich.
Gruß Elmar
- Als Antwort markiert mowastengr Sonntag, 11. November 2012 10:11
Alle Antworten
-
Hallo Walter,
der Stacktrace wäre zwar u. U. hilfreich - aber vermutlich stolperst Du über das Problem,
das der Beitrag http://zachsaw.blogspot.de/2010/07/net-serialport-woes.html behandelt.Eine Lösung (in C#) findet sich unter: http://zachsaw.blogspot.de/2010/07/serialport-ioexception-workaround-in-c.html. Solltest Du Probleme haben, es in VB.NET zu übersetzen, melde Dich.
Gruß Elmar
- Als Antwort markiert mowastengr Sonntag, 11. November 2012 10:11
-
Hallo Elmar,
Vielen Dank für diesen Hinweise - da bin ich wohl auf ein alt-bekanntes Problem gestoßen.
Wenn Du bei der Übersetzung von "C" nach "VB" helfen könntest, wäre ich Dir sehr dankbar, denn so firm bin ich mit "C.Net" nun auch wieder nicht.
Danke nochmals und Gruß - Walter
wafest42
-
Hallo Björn und Elmar,
danke für die Hinweise....
Okay, jetzt habe ich den serialport-ioexception-workaround von C# nach VB übersetzt. Und was mache ich jetzt damit?
Ist das ein eigenständiges Programm das den Serial Port Bug auf einem Rechner fixed (repariert) oder muss dieser Teil in mein SerialPort-Programm eingefügt werden und beim Starten durchlaufen werden? Oder ?
Ich bitte um Eure Tipps - Danke
Gruß - Walter
wafest42
-
Hi Walter,
die Benutzung wird am Ende des Beispiels gezeigt.
internal class Program { private static void Main(string[] args) { SerialPortFixer.Execute("COM1"); using (SerialPort port = new SerialPort("COM1")) { port.Write("test"); } } } }
Also einmal Aufrufen Bevor du den SerialPort benutzt.
MFG
Björn
-
Okay, Danke, Björn,
ich werd's versuchen.
Noch 'ne Frage:
Nach der Umwandlung von C# nach VB stand an einer Stelle
Const dwAccess As Integer = CInt(&Hc0000000UI)
Hier habe ich "UI" entfernt damit es in Editor keinen Fehler gibt. Is das Okay?
Nachmals Danke und Gruß - Walter
wafest42
-
Frage an Alle:
In dem SerialPort-Workaround hatte ich
'Const dwAccess As Integer = CInt(&HC0000000UI)
Const dwAccess AsInteger=CInt(&HC0000000)
an Stelle der Zeile in grün (Kommentar) oben die Zeile in blau eingesetzt - dabei nicht an das UI gedacht. Ich habe das Workaround dann so laufen lassen und eine Meldung bekommen, dass etwas im System geändert wird. Das habe ich akzeptiert und meine Applikation noch einmal gestartet. Habe ich da jetzt etwas kaputt gemacht, denn wie Peter richtig korrigiert, hätte die Zeil so aussehen sollen:
DimdwAccess AsUInteger= Convert.ToUInt32("C0000000", 16)
Oder wird das automatisch richtig gemacht? Danke und Gruß - Walter
wafest42
- Bearbeitet mowastengr Montag, 12. November 2012 08:16 Zeilen falsch
-
Hallo Walter,
was die Konstante angeht kann man einfach schreiben:
Const dwAccess As Integer = &HC0000000 Console.WriteLine("dwAccess {0} / {0:x4}", dwAccess)
denn Visual Basic konvertiert den Wert entsprechend - was auch an einem "alten Leiden" von Visual Basic (bis 2005) liegt, da es früher nicht mit vorzeichenlosen Integerwerten umgehen konnte und solche Werte "hinbiegt".
Faktisch verwendet CreateFile einen DWORD (einen vorzeichenlosen Integer = UInteger). Es interessiert sich aber nur für die gesetzten Bits (es wird also nicht gerechnet), somit geht auch Integer.
Was den Fehler angeht:
Der weist darauf hin, dass Datenbereiche überschrieben wurden, weil ein Puffer zu klein war. Dazu müsste man aber genauer die Fehlerstelle eingrenzen. Nach welchen Aufrufen tritt Meldung auf?Eine Schwäche im Original ist es, dass es keine Initialisierung bei DCB vornimmt, wo DCBLength die Länge der Struktur enthalten sollte. Ein möglicher Fix:
Private Sub InitializeDcb() Dim dcbState As Dcb dcbState.DCBlength = CUInt(Marshal.SizeOf(GetType(Dcb))) ' DBCState ohne ReadOnly GetCommStateNative(dcbState) dcbState.Flags = dcbState.Flags And Not (1UI << DcbFlagAbortOnError) SetCommStateNative(dcbState) End Sub
Wobei Du aber erst prüfen solltest, ob das Problem an der Stelle auftritt. Dazu gucken, ob der Wert von DCBLength nach einem nicht initialisierten Aufruf einen anderen Wert enthält als 28 (kommt hier raus).
Gruß Elmar
-
Hallo an Alle,
jetzt meine ich Probleme zu haben, das rs232/usb Workaround überhaupt zum laufen zu bringen. Ich dachte zwar, aber etwas geht einfach noch nicht.
Was ist ein namespace? (das ist 'ne Frage von einem .net Anfänger)
Ich habe versucht die C# Lösung von Elmar nach VB zu übersetzen und den Code dann einzubinden - aber ich komme nicht weiter. Ich wollte jetzt ein eigenständiges Programm daraus machen, komme auch nicht weiter. Mei, ist das kompliziert....
Wer kann mir bitte helfen?? Danke
Gruß - Walter
wafest42
-
Hallo Walter,
wo genau hakt es denn?
Weißt Du nicht wie Du die Klasse verwenden sollst, oder kommst Du mit der Übersetzung in VB schon nicht weiter?
Zu den Namespaces schau Dir mal an: Namespaces in Visual Basic
Gruß Elmar
-
Hallo Elmar und alle Anderen, die mir helfen wollten:
in USA gibt es einen schönen Spruch:
" I think I was barking up the wrong tree!"
Ich glaube ich habe mir selbst - durch fehlerhaftes programmieren der RS232 Schnittstellen-Anwendung - die obige Fehlermeldung produziert.
Ich habe meine Anwendung noch einmal genau analysiert, einiges über die VB Version der RS232 Schnittstelle gelernt und dann Korrekturen eingefügt. Und jetzt scheint es recht sauber zu laufen: Keine ominösen Fehlermeldungen mehr.
Also - besten Dank noch einmal an Alle die mir helfen wollten - Ihr seit eine tolle Truppe.
Gruß - Walter
wafest42