CserialMFC
-
ok, wo sollte das denn definiert werden und was steht da drin?
-
Also ich vermute, Du hast die Datei nicht ins Projekt eingefügt oder diese modifiziert, denn die Definition steht in der Datei SerialWnd.cpp (wie das auch üblich ist).
Siehe hier:
// Register the standard CSerialWnd COM message const UINT CSerialWnd::mg_nDefaultComMsg = ::RegisterWindowMessage(_T("CSerialWnd_DefaultComMsg"));
-
Die SerialWnd.cpp ist da und die Definition ist so, wie Du es sagst.
-
Hier noch der Code den ich eingefügt habe:
BEGIN_MESSAGE_MAP(CdistoDlg, CDialog) ... //}}AFX_MSG_MAP ... ON_WM_SERIAL(OnSerialMsg) END_MESSAGE_MAP()Und der Handler dazu
afx_msg LRESULT CMyClass::OnSerialMsg (WPARAM wParam, LPARAM lParam)Hab leider noch keine Erfahrung mit WM..
-
Bist Du wirlich ganz sicher, dass die CPP Datei Teil Deines Projektes ist, also im Projektexplorer auch erscheint?
Zudem, wenn Du diese Klasse und diese Nachrichten verwendest, dann sollte dieser ganze Thread im MFC Forum weitergeführt werden. Oder hast Du etwa gar kein MFC Projekt?
-
Das nennt man denn wohl Vauxpas...(mannomann).natürlich war sie nicht im Explorer. Das ganze ist ein MFC-Projekt. Vielen Dank!
-
Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum WinAPI in das Forum MFC (Visual C++) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
...Und Fauxpas hab ich auch noch falsch geschrieben..naja.
Mein Problem hat sich nun gelöst. Damit die FunktionLRESULT CdistoDlg::OnSerialMsg(WPARAM wParam, LPARAM lParam)aufgerufen wird wenn Daten reinkommen, musste ich den Port mit
serial.Open(_T("COM7"),this, WM_NULL, 0, 0, 0);öffnen. Allerdings kommt mir das ganze ziemlich random vor, denn wenn ich nun einen Befehl mit
serial.Write("a\r\n");bzw.
serial.Write("a\r\n", 0, 0, 100);sende, wird die Funktion nicht immer aufgerufen. Wenn ja, dann kann auch die Antwort gelesen werden - aber meist ist das nicht der Fall.
Im Debug-Modus funktioniert es gut; kommt mir so vor, als wenn das Programm schneller läuft als die Hardware reagiert. Aber selbst mit CSerialMFC::Break() läuft nix.
-
Es gibt so etwas wie Flush! Hast Du das schon gesehen?
-
Nein, das habe ich noch nicht. Bei flush bin ich nur auf eine - denke ich - für mich brauchbare Funktion gekommen, allerdings ist die für .NET Framework (Sendkeys.flush). Gibt es sonst noch eine Möglichkeit zu erzwingen, dass alle messages in der Warteschlange abgearbeitet werden?