Probs mit Prog für Datenempfang über COM
-
Leute, bitte helft mir, ich muss es so schnell wie möglich hinkriegen, Daten von einem Com-Port einzulesen und in eine Datei zu schreiben. Wie mein Nick schon sagt, bin ich ne Null bzw. nen Newbie in C++ und diesen seriellen-Com-Sachen.
Ich hab nun erstmal nen Beispielcode von der msdn-Seite genommen und wollte es in VC++ ausprobieren, aber da gibts die unten stehenden Fehlermeldungen. Hab schon gelesen, dass das damit zusammenhängen könnte, dass ich so ne kostenlose Express-Version habe.
Hier erstmal der Code#include "stdafx.h" #include <stdio.h> #include <afx.h> int _tmain(int argc, _TCHAR* argv[]) { char *lpBuf=""; DWORD dwRead; DWORD READ_BUF_SIZE=0;; BOOL fWaitingOnRead = FALSE; OVERLAPPED osReader = {0}; HANDLE hComm; hComm = CreateFile( TEXT("COM5:"), GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0); if (hComm == INVALID_HANDLE_VALUE) // error opening port; abort // Create the overlapped event. Must be closed before exiting // to avoid a handle leak. osReader.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); if (osReader.hEvent == NULL) // Error creating overlapped event; abort. if (!fWaitingOnRead) { // Issue read operation. if (!ReadFile(hComm, lpBuf, READ_BUF_SIZE, &dwRead, &osReader)) { if (GetLastError() != ERROR_IO_PENDING) {} // read not delayed? // Error in communications; report it. else fWaitingOnRead = TRUE; } else { // read completed immediately /* HandleASuccessfulRead(lpBuf, dwRead); */ } } return 0; }
Vermutlich ist der Code echt Müll so, aber ich wollts nur mal ausprobieren. Allmählich wird die Zeit knapp und ich steh echt unter Druck, vielleicht könnt Ihr mich ja retten.
Die Fehlermeldungen:
test.obj : warning LNK4229: invalid directive '/ignore:4089' encountered; ignored
LINK : fatal error LNK1104: cannot open file 'uafxcwd.lib'
-
Für was bindest du die afx.h ein?
Programmierund der seriellen Schnittstelle ist nicht ganz trivial! Ich würde folgendes nehmen:
CSerialPort v1.03 - Serial Port Wrapper
http://www.codeproject.com/system/cserialport.aspSerial library for C++
http://www.codeproject.com/system/serial.asp
-
Ich habe deine anderen Posts gelöscht, da die sicher ein Versehen waren.
Edit: Und jetzt hör bitte auf, ständig neue Posts zu erstellen, Spam lösche ich.
-
@ estartu_de: An wen war das gerichtet und worum gehts überhaupt ??? Ist das gerade das falsche Forum, in dass Du geschrieben hast ?
@ Jochen Kalmbach: ich binde die afx.h für diese ganzen CreateFile/ReadFile-Geschichten ein. Eigentlich ist der Code, den ich da gepostet habe, mein kompletter Code.
By the way: Deine Links funktionieren nicht, aber ich glaube, ich weiß, auf was Du hinaus willst, hab schon einmal etwas über CSerialPort gelesen. Ich fand die Geschichte, die ich da oben gepostet habe nur einfacher und hab auch in anderen Foren schon oft gelesen, dass Datenempfang damit recht gut klappt. Das einzige was fehlt ist ein Teil der das gelesene in eine Datei kopiert. Wenn der Debugger zudem auch keine Debug-Fehler mehr anzeigt, erhoffe ich mir, dass das so funktioniert
-
Softwarenull schrieb:
@ estartu_de: An wen war das gerichtet und worum gehts überhaupt ??? Ist das gerade das falsche Forum, in dass Du geschrieben hast ?
Nein, es ist nicht das falsche Forum und es ist sogar der richtige Beitrag.
Es ist an DICH gerichtet.
Du hast deinen ersten Beitrag ganze 4 Mal gepostet, hab doch etwas Geduld wenn irgendwo jemand "auf der Leitung steht".
Vor allem finde ich es Mist, wenn jemand schon auf deine Frage geantwortet hat und du machst noch einen neuen Post. Sowas kann man auch als Ignorieren verstehen.
Ich unterstelle dir einfach "temporäre Sehschwäche" und keine Mutwilligkeit - und du bist nächstes Mal geduldiger.
-
@ estartu_de: Also, nicht gleich mit Beleidiungen oder ähnlichem anfangen, wenn man die Ursache für so ein Vierfachposting nicht kennt. Gestern abend gabs scheinbar irgendwelche Datenbankprobleme bei www.c-plusplus.net, zumindest kam man weder auf die Startseite, noch konnte man sonst irgendetwas machen. Diese Probleme kamen scheinbar genau in dem Moment auf, als ich meinen Thread schrieb. Ich drückte dann auf "Abschicken" und es passierte nichts. Minutenlang. Also drückte ich nochmal und nochmal... Wie ich jetzt von Dir höre, kam meine Anfrage aber wohl doch immer an, sodass mein Thread eingetragen wurde, mir das aber nicht angezeigt wurde. Ich programmiere selber Homepages und ärger mich immer über die Leute, die da zig mal auf den Knopf drücken. Daher ärger ich mich nun auch über mich selbst und entschuldige mich. Dass die Threads trotz dieser Probleme alle eingetragen wurden wußte ich nicht. Ich hätte gern gesehen, was da schon geantwortet wurde, hab ich aber nicht. Heute morgen war nur noch einer drin. Solche Merkfacheintragungen kann man übrigens aber ganz leicht verhindern. Einfach die POST-Variablen miteinander und mit den Datenbankinhalten vergleichen. Gibts die Einträge schon, einfach nicht nochmal eintragen. Das ist bei Eurem Forum sicher etwas zeitaufwendig und wird die Site an der Stelle langsamer machen, spart Euch Moderatoren aber Arbeit.
-
Ich wollte eigentlich nicht beleidigend sein - sollte eigentlich eine sachliche Erklärung sein.
Falls du eine Lösung hast, wie man die Forensoftware verbessern kann, mail doch mal Marc++us oder Gerard - die freuen sich bestimmt über Unterstützung.
Es scheint mir jedenfalls, als wenn du Ahnung hättest, was du da sagst.
-
Als von Webprogrammierung hab ich in der Tat Ahnung, nur eben von C++ nicht, weswegen ich hier auch immer noch ahnungslos und ratlos über meinem Code sitze...
-
Von Serieller Schnittstelle habe ich auch keine Ahnung - aber als ich bei Google nach der Fehlermeldung gesucht habe, hat der mich auf ne Idee gebracht:
LNK1104: Cannot open file nafxcwd.lib
This error sometimes occurs when a project uses a class from the MFC but the project settings don't explicitly tell the link editor to look in the MFC libraries.
Go to Project --> Settings (Build --> Settings in Visual C++ 4.0). On the General tab check the box that says "Use MFC in a Shared DLL".
Wundere dich nicht, dass die lib anders heißt, ich vermute das liegt daran, dass du für Unicode kompilierst.
Versuch das mal, was da steht und drück danach unter Erstellen auf Alles neu erstellen.Ich hoffe, das hilft.