Möchte eine Kommunikation zwischen PC und uC über virt.COMPort aufbauen,
bekomme eine Fehlermeldung nach Start der Anwendung:
der Code:
#include <cstdlib>
#include <iostream>
#include <windows.h>
using namespace std;
int main(void)
{
HANDLE Port;
DCB dcb;
char portname[]="COM5";
char ReadChar;
DWORD BytesRW;
Port=CreateFile("COM5",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0
,NULL);
dcb.BaudRate=9600;
dcb.ByteSize=8;
dcb.Parity=NOPARITY;
dcb.StopBits=ONESTOPBIT;
SetCommState(Port,&dcb);
ReadFile(Port,&ReadChar,1,&BytesRW,NULL);
printf("%s\n",ReadChar);
CloseHandle(Port);
system("PAUSE");
return 0;
}
benutze DevC++, MinGW
Die Fehlermeldung: "COM.exe has encountered a problem and needs to
close"
Probiere so etwas zum ersten mal, deswegen find ich auch keine
Lösungsansätze.
Stefan
1/ Im einfachsten Fall geht CreateFile schief, d.h. Port erhält ein
illegales HANDLE und die Funktionen, die mit dem illegalen Port
arbeiten, feuern das Programm ins Nirvana bzw. sticheln den Aufpasser im
Kernel. Fehlerhandling bei API Zugriffen ist essentiell.
2/ Desweiteren ist der Formatstring im printf("%s\n",ReadChar); falsch.
Auf eine Charvariable sollte man nicht als Stringvariable zugreifen.
@Stefan B.
dann hast du das auch verschoben!.. ich hatte mich schon gewundert,
kannst du es dann bitte wieder zurück zu "uC & Elektronik" schieben, da
kann man mir vielleicht eher helfen!
Stefan
Nein ich kann sowas nicht. Ein Moderator oder der Chef selbst hat deine
Nachricht verschoben und das Doppelposting von eben gelöscht.
Moderatoren und den Chef himself erkennt man am fettgedruckten
Benutzernamen. Und ja, es hat schon einen Sinn, dass er das gemacht hat,
auch wenn du das heute noch nicht verstehst ;-)
>Port=CreateFile("COM5",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING, 0,NULL);> dcb.BaudRate=9600;> dcb.ByteSize=8;> dcb.Parity=NOPARITY;> dcb.StopBits=ONESTOPBIT;
Die Zeilen haben schon genügend Potential dir eine Menge Ärger zu
bereiten.
Mal abgesehen von der vergessenen Fehlerbehandlung.
Kopier nicht irgendwelche Beispiele aus dem Internet sondern lies dir
das ganze in der MSDN durch, da gibt es extra einen Artikel.
Devicename "COMx" klappt nur von COM1 bis COM9. Da du auch mit
virtuellen COMports arbeiten willst besteht eine Wahrscheinlichkeit für
x>9.
Den DCB nur halb zu initialisieren dich abhängig von der vorherigen
Initialisierung des COM Ports. Bsp. RTS/CTS etc.
ich dachte du hast einen speziellen Artikel auf der MSDN Seite im Kopf,
gefunden hab ich nur welche speziell für VB, aber das kann ja auch nicht
schaden
Stefan
Vergiß die Suchfunktion der MSDN mit mehreren Stichworten, da findest du
nichts oder nur Werbeschrott und seichte Artikel für Anfänger. Nimm
google für den Einstieg in die MSDN, da werden die "technischen"
(Einstiegs)seiten gefunden, wo brauchbare Informationen stehen.