Hilfe benötigt: Serielle Schnittstelle in MFC Anwendung
-
Hallo liebe Experten!
Ich brauche mal Hilfe. Ich habe eine SDI Anwendung erstellt und möchte jetzt Ereignisgesteuert Daten am COM ausgeben und lesen. Habe mir schon die FAQs durchgelesen... leider geht das alles irgendwie nicht!
z.B. bekomme ich bei diesem http://www.c-plusplus.net/forum/viewtopic-var-t-is-39047.html nur Fehlermeldungen:
Warnung 1 warning C4244: '=': Konvertierung von 'INT_PTR' in 'int', möglicher Datenverlust c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\mfc_test_1\mfc_test_1\mfc_test_1view.cpp 94 Warnung 7 warning C4311: 'Typumwandlung': Zeigerverkürzung von 'HANDLE' zu 'int' c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\mfc_test_1\mfc_test_1\seriellport.cpp 93 Fehler 6 error C2664: 'CreateFileW': Konvertierung des Parameters 1 von 'char [15]' in 'LPCWSTR' nicht möglich c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\mfc_test_1\mfc_test_1\seriellport.cpp 92 Fehler 4 error C2143: Syntaxfehler: Es fehlt ';' vor '{' c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\mfc_test_1\mfc_test_1\seriellport.cpp 25 Fehler 5 error C2447: '{': Funktionskopf fehlt - Parameterliste im alten Stil? c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\mfc_test_1\mfc_test_1\seriellport.cpp 25 Fehler 3 error C2059: Syntaxfehler: '/' c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\mfc_test_1\mfc_test_1\seriellport.cpp 23 Fehler 2 error C2039: 'm_error': Ist kein Element von 'CSERIELL' c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\mfc_test_1\mfc_test_1\seriellport.cpp 13
Ich benutze Microsoft Visual Studio 2005 Professional.
Ich hoffe ihr könnt mir helfen
-
Ich Rate immer etwas fertiges und erprobtes zu verwenden:
http://www.codeproject.com/KB/system/serial.aspxVermutlich muss Unix-Tom nur mal seine Klasse TCHAR-fähig machen... und mal ein paar Rückgabewerte prüfen... dann geht es wieder... und irgendwie hat entweder das Forum einige Zeilen verschluckt oder es sind noch ein paar Unschönheiten drin...
-
Ja danke! Den Link habe ich auch schon gesehen... wollte mich nur nicht registrieren.
-
Ich glaub ich bin total besch...
Habe mir jetzt mal die Dateien von dem Link runtergeladen.
Wie und Was muss ich denn nun zu meinem Projekt hinzufügen?
Bekomme folgende Fehler:Fehler 3 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall CSerialEx::CSerialEx(void)" (??0CSerialEx@@QAE@XZ)" in Funktion ""public: __thiscall CSerialWnd::CSerialWnd(void)" (??0CSerialWnd@@QAE@XZ)". SerialWnd.obj Fehler 4 error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual long __thiscall CSerialEx::Open(wchar_t const *,unsigned long,unsigned long,bool)" (?Open@CSerialEx@@UAEJPB_WKK_N@Z)". SerialWnd.obj Fehler 5 error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual long __thiscall CSerial::Setup(enum CSerial::EBaudrate,enum CSerial::EDataBits,enum CSerial::EParity,enum CSerial::EStopBits)" (?Setup@CSerial@@UAEJW4EBaudrate@1@W4EDataBits@1@W4EParity@1@W4EStopBits@1@@Z)". SerialWnd.obj Fehler 6 error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual long __thiscall CSerial::SetEventChar(unsigned char,bool)" (?SetEventChar@CSerial@@UAEJE_N@Z)". SerialWnd.obj Warnung 2 warning C4244: '=': Konvertierung von 'LPARAM' in 'LONG', möglicher Datenverlust c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\mfc_test_1\mfc_test_1\serialwnd.cpp 97 Warnung 1 warning C4244: '=': Konvertierung von 'INT_PTR' in 'int', möglicher Datenverlust c:\dokumente und einstellungen\admin\eigene dateien\visual studio 2005\projects\mfc_test_1\mfc_test_1\mfc_test_1view.cpp 94 Fehler 7 error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual long __thiscall CSerial::SetMask(unsigned long)" (?SetMask@CSerial@@UAEJK@Z)". SerialWnd.obj Fehler 8 error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual long __thiscall CSerial::WaitEvent(struct _OVERLAPPED *,unsigned long)" (?WaitEvent@CSerial@@UAEJPAU_OVERLAPPED@@K@Z)". SerialWnd.obj Fehler 9 error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual long __thiscall CSerial::SetupHandshaking(enum CSerial::EHandshake)" (?SetupHandshaking@CSerial@@UAEJW4EHandshake@1@@Z)". SerialWnd.obj Fehler 10 error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual long __thiscall CSerial::SetupReadTimeouts(enum CSerial::EReadTimeout)" (?SetupReadTimeouts@CSerial@@UAEJW4EReadTimeout@1@@Z)". SerialWnd.obj Fehler 11 error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual enum CSerial::EBaudrate __thiscall CSerial::GetBaudrate(void)" (?GetBaudrate@CSerial@@UAE?AW4EBaudrate@1@XZ)". SerialWnd.obj Fehler 12 error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual enum CSerial::EDataBits __thiscall CSerial::GetDataBits(void)" (?GetDataBits@CSerial@@UAE?AW4EDataBits@1@XZ)". SerialWnd.obj Fehler 13 error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual enum CSerial::EParity __thiscall CSerial::GetParity(void)" (?GetParity@CSerial@@UAE?AW4EParity@1@XZ)". SerialWnd.obj Fehler 14 error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual enum CSerial::EStopBits __thiscall CSerial::GetStopBits(void)" (?GetStopBits@CSerial@@UAE?AW4EStopBits@1@XZ)". SerialWnd.obj Fehler 15 error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual enum CSerial::EHandshake __thiscall CSerial::GetHandshaking(void)" (?GetHandshaking@CSerial@@UAE?AW4EHandshake@1@XZ)". SerialWnd.obj Fehler 16 error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual unsigned long __thiscall CSerial::GetEventMask(void)" (?GetEventMask@CSerial@@UAEKXZ)". SerialWnd.obj Fehler 17 error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual unsigned char __thiscall CSerial::GetEventChar(void)" (?GetEventChar@CSerial@@UAEEXZ)". SerialWnd.obj Fehler 18 error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual long __thiscall CSerial::Write(char const *,unsigned long *,struct _OVERLAPPED *,unsigned long)" (?Write@CSerial@@UAEJPBDPAKPAU_OVERLAPPED@@K@Z)". SerialWnd.obj Fehler 19 error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual long __thiscall CSerial::Write(void const *,unsigned int,unsigned long *,struct _OVERLAPPED *,unsigned long)" (?Write@CSerial@@UAEJPBXIPAKPAU_OVERLAPPED@@K@Z)". SerialWnd.obj Fehler 20 error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual long __thiscall CSerial::Read(void *,unsigned int,unsigned long *,struct _OVERLAPPED *,unsigned long)" (?Read@CSerial@@UAEJPAXIPAKPAU_OVERLAPPED@@K@Z)". SerialWnd.obj Fehler 21 error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual long __thiscall CSerialEx::StartListener(void)" (?StartListener@CSerialEx@@UAEJXZ)". SerialWnd.obj Fehler 22 error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual long __thiscall CSerialEx::StopListener(unsigned long)" (?StopListener@CSerialEx@@UAEJK@Z)". SerialWnd.obj Fehler 23 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: virtual __thiscall CSerialEx::~CSerialEx(void)" (??1CSerialEx@@UAE@XZ)" in Funktion ""public: virtual __thiscall CSerialWnd::~CSerialWnd(void)" (??1CSerialWnd@@UAE@XZ)". SerialWnd.obj Fehler 24 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: virtual long __thiscall CSerialEx::Close(void)" (?Close@CSerialEx@@UAEJXZ)" in Funktion ""public: virtual long __thiscall CSerialWnd::Close(void)" (?Close@CSerialWnd@@UAEJXZ)". SerialWnd.obj Fehler 25 fatal error LNK1120: 22 nicht aufgelöste externe Verweise. C:\Dokumente und Einstellungen\Admin\Eigene Dateien\Visual Studio 2005\Projects\MFC_Test_1\Debug\MFC_Test_1.exe
-
Du musst auch *alle* cpp-Dateien in Dein Projekt aufnehmen!
-
Danke Jochen!
Das war natürlich der richtige Hinweis! Ich bin leider noch nicht so firm mit all dem Zeugs... Konsolenprojekte ok aber naja. Die nächste Frage kommt bestimmt
-
@ Jochen:
Hast du schon mal mit dieser Klasse gearbeitet?
Ich komme damit noch nicht ganz klar.
-
Ja. Was hast Du denn für Fragen?
-
Also ich möchte in meiner Anwendung mehrere COM-Ports benutzen.
Wo sollte man diese da am besten initialisieren?Wie werden die Ports initialisiert?
Auf Knopfdruck (OnButton1) sollen 3 Byte gesendet werden.
Wie mache ich das?Ich weiss, dass die Fragen wahrscheinlich alle doof sind, aber leider fehlt mir eine richtige Dokumentation zu den Dateien...
-
Willst Du mehrere *gleichzeitig* benutzen, oder nacheinander?
Wenn gleichzeitig, dann musst Du von der entsprechenden Klasse eben mehrere Instanzen anlegen.Und wie man damit umgeht, steht eigentlich im Artikel ausführlich drin, z.B. so:
CSerial serial;
// Attempt to open the serial port (COM1) serial.Open(_T("COM1")); // Setup the serial port (9600,N81) using hardware handshaking serial.Setup(CSerial::EBaud9600,CSerial::EData8,CSerial::EParNone,CSerial::EStop1); serial.SetupHandshaking(CSerial::EHandshakeHardware); // The serial port is now ready and we can send/receive data. If // the following call blocks, then the other side doesn't support // hardware handshaking. serial.Write("Hello world"); // Close the port again serial.Close();
Du schreiben kannst Du auch einen Puffer verwenden:
char data[] = {0x10, 0x20, 0x30}; serial.Write(data, 3); // schreibe 3 Byte
-
Hallo und gesundes Neues!!
Leider funktioniert schon das
serial.Open(_T("COM1"));
nicht! "Funktion akzeptiert keine 1 Argumente"
Ich habe jetzt mal das .open() und .Setup() in den Ctor der CAnwendungView klasse geschrieben. Kann man das so machen oder gibts dafür ne bessere Stelle?
Achso und ich möchte an einer Schnittstelle auf ein Datenpaket warten (bei dem ich nicht weiss, wann es kommt) und an der zweiten Schnittstelle immer (zyklisch) einen Befehl (3Byte) senden und die Antwort darauf empfangen.
-
Du musst Dir den Artikel durchlesen. Da wird das alles beschrieben; vor allem auch das Empfangen mit Hilfe der MFC... da musst Du die *richtige* Klasse verwneden und dem Msg-Filter/Command eintragen...
-
Ok wer lesen kann ist klar im Vorteil!
Allerdings bin ich halt mit der Windowsprogrammierung noch gaaaanz weit am Anfang, daher stellt sich mir jetzt die Frage:
The hwndDest argument specifies the window, where the message should be sent to
Welches Fenster sollte ich hier angeben und wie mache ich das?
2. Frage(OT):
wie kann ich einen CString so zusammenbasteln, dass exakt(!) 3 Byte (jeweils unsigned char) darin stehen ohne \n und so nen Firlefanz?
-
1. Das Fenster-Handle Deines Hauptfensters?
2.CString str(_T("ABC"));
-
Hallo Jochen!
ich habe beim Öffnen des Ports jetzt einfach mal "this" angegeben. Hoffe das stimmt so!? Daten gehen jedenfalls korrekt an den Mikrokontroller raus.
Jetzt möchte ich Daten empfangen. Wenn ich aber
ON_WM_SERIAL(OnSerialMsg)
in die Messagemap von CmeineAnwendungView.cpp eintrage, bekomme ich nen Fehler "OnSerialMsg" nichtdeklarierter Bezeichner.
WAS muss ich denn da WO noch einfügen?
-
Das OnSerialMsg musst Du natürlich in die Klasse einfügen, welche die Msg;ap hat. Und dort wowohl in die h-Datei als auch in die cpp-Datei, wo Du dann machen kannst was Du willst...
Da sind soch MFC Beispiele dabei... schau die Dir doch mal an...
-
Also ich hab mir das MFC Beispiel jetzt zum xten mal ansgesehen und blicke immernoch nicht durch! Ich habe versucht das so weit wie möglich zu übernehmen. Es lässt sich ohne Fehler kompilieren aber beim Ausführen kommt eine Exception-Meldung.
Ich will doch nur ein Byte senden und dann eine Nachricht haben, wenn die 3 Antwortbytes da sind
EDIT:
Ich habe jetzt hier mal den Code:
// MFC_Test_1View.cpp : Implementierung der Klasse CMFC_Test_1View // #include "stdafx.h" #include "MFC_Test_1.h" #include "SerialMFC.h" #include "MFC_Test_1Doc.h" #include "MFC_Test_1View.h" #include "PortsDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CMFC_Test_1View IMPLEMENT_DYNCREATE(CMFC_Test_1View, CFormView) BEGIN_MESSAGE_MAP(CMFC_Test_1View, CFormView) ON_COMMAND(ID_EINSTELLUNGEN_PORTS, &CMFC_Test_1View::OnEinstellungenPorts) ON_BN_CLICKED(IDC_BUTTON1, &CMFC_Test_1View::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON2, &CMFC_Test_1View::OnBnClickedButton2) ON_BN_CLICKED(IDC_BUTTON3, &CMFC_Test_1View::OnBnClickedButton3) ON_BN_CLICKED(IDC_BUTTON4, &CMFC_Test_1View::OnBnClickedButton4) ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER1, &CMFC_Test_1View::OnNMCustomdrawSlider1) ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER1, &CMFC_Test_1View::OnNMReleasedcaptureSlider1) ON_BN_CLICKED(IDC_BUTTON5, &CMFC_Test_1View::OnBnClickedButton5) ON_WM_SERIAL(OnSerialMsg) END_MESSAGE_MAP() // CMFC_Test_1View-Erstellung/Zerstörung CSerialMFC myPort1; CMFC_Test_1View::CMFC_Test_1View() : CFormView(CMFC_Test_1View::IDD) , wert(0) { // TODO: Hier Code zur Konstruktion einfügen myPort1.Open(_T("COM1"),this); myPort1.Setup(CSerial::EBaud115200,CSerial::EData8,CSerial::EParNone,CSerial::EStop1); myPort1.SetupHandshaking(CSerial::EHandshakeOff); myPort1.SetupReadTimeouts(CSerial::EReadTimeoutNonblocking); } CMFC_Test_1View::~CMFC_Test_1View() { myPort1.Close(); } void CMFC_Test_1View::DoDataExchange(CDataExchange* pDX) { CFormView::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, wert); DDV_MinMaxInt(pDX, wert, 0, 1024); DDX_Control(pDX, IDC_SLIDER1, m_CSlider1); DDX_Control(pDX, IDC_EDIT2, Edit_Fuss); } BOOL CMFC_Test_1View::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Ändern Sie hier die Fensterklasse oder die Darstellung, indem Sie // CREATESTRUCT cs modifizieren. return CFormView::PreCreateWindow(cs); } void CMFC_Test_1View::OnInitialUpdate() { CFormView::OnInitialUpdate(); GetParentFrame()->RecalcLayout(); ResizeParentToFit(); m_CSlider1.SetRange(0,1023,false); m_CSlider1.SetPos(520); } // CMFC_Test_1View-Diagnose #ifdef _DEBUG void CMFC_Test_1View::AssertValid() const { CFormView::AssertValid(); } void CMFC_Test_1View::Dump(CDumpContext& dc) const { CFormView::Dump(dc); } CMFC_Test_1Doc* CMFC_Test_1View::GetDocument() const // Nicht-Debugversion ist inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMFC_Test_1Doc))); return (CMFC_Test_1Doc*)m_pDocument; } #endif //_DEBUG // CMFC_Test_1View-Meldungshandler void CMFC_Test_1View::OnEinstellungenPorts() { // TODO: Fügen Sie hier Ihren Befehlsbehandlungscode ein. CPortsDlg myPortsDlg; int nRetValue; nRetValue = myPortsDlg.DoModal(); } void CMFC_Test_1View::OnBnClickedButton1() // Handgelenk { // TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein. CEdit *pEntry = static_cast<CEdit*>(GetDlgItem(IDC_EDIT1)); CString EntryText; pEntry->GetWindowTextW(EntryText); int i; i = _wtoi(EntryText); unsigned char achse, hbyte, lbyte; achse = 0xB2; lbyte = i; hbyte = i>>8; myPort1.Write(&achse,1); myPort1.Write(&hbyte,1); myPort1.Write(&lbyte,1); } void CMFC_Test_1View::OnBnClickedButton2() // Ellbogen { // TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein. CEdit *pEntry = static_cast<CEdit*>(GetDlgItem(IDC_EDIT1)); CString EntryText; pEntry->GetWindowTextW(EntryText); int i; i = _wtoi(EntryText); unsigned char achse, hbyte, lbyte; achse = 0xB0; lbyte = i; hbyte = i>>8; myPort1.Write(&achse,1); myPort1.Write(&hbyte,1); myPort1.Write(&lbyte,1); } void CMFC_Test_1View::OnBnClickedButton3() // Schulter { // TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein. CEdit *pEntry = static_cast<CEdit*>(GetDlgItem(IDC_EDIT1)); CString EntryText; pEntry->GetWindowTextW(EntryText); int i; i = _wtoi(EntryText); unsigned char achse, hbyte, lbyte; achse = 0xB1; lbyte = i; hbyte = i>>8; myPort1.Write(&achse,1); myPort1.Write(&hbyte,1); myPort1.Write(&lbyte,1); } void CMFC_Test_1View::OnBnClickedButton4() // Fuss { // TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein. CEdit *pEntry = static_cast<CEdit*>(GetDlgItem(IDC_EDIT1)); CString EntryText; pEntry->GetWindowTextW(EntryText); int i; i = _wtoi(EntryText); unsigned char achse, hbyte, lbyte; achse = 0xB3; lbyte = i; hbyte = i>>8; myPort1.Write(&achse,1); myPort1.Write(&hbyte,1); myPort1.Write(&lbyte,1); m_CSlider1.SetPos(i); } void CMFC_Test_1View::OnNMCustomdrawSlider1(NMHDR *pNMHDR, LRESULT *pResult) { LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR); // TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein. *pResult = 0; } void CMFC_Test_1View::OnNMReleasedcaptureSlider1(NMHDR *pNMHDR, LRESULT *pResult) { // TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein. int i; i = m_CSlider1.GetPos(); unsigned char achse, hbyte, lbyte; achse = 0xB3; lbyte = i; hbyte = i>>8; myPort1.Write(&achse,1); myPort1.Write(&hbyte,1); myPort1.Write(&lbyte,1); *pResult = 0; } LRESULT CMFC_Test_1View::OnSerialMsg (WPARAM wParam, LPARAM /*lParam*/) { CSerial::EEvent eEvent = CSerial::EEvent(LOWORD(wParam)); CSerial::EError eError = CSerial::EError(HIWORD(wParam)); if (eEvent & CSerial::EEventRecv) { //// Create a clean buffer //DWORD dwRead; //char szData[101]; //const int nBuflen = sizeof(szData)-1; //// Obtain the data from the serial port //do //{ // m_serial.Read(szData,nBuflen,&dwRead); // szData[dwRead] = '\0'; // // Scan the string for unwanted characters // for (DWORD dwChar=0; dwChar<dwRead; dwChar++) // { // if (!isprint(szData[dwChar]) && !isspace(szData[dwChar])) // { // szData[dwChar] = '.'; // } // } //} while (dwRead == nBuflen); } return 0; } void CMFC_Test_1View::OnBnClickedButton5() { // TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein. unsigned char achse, data[3]; achse=0xA3; myPort1.Write(&achse,1); //myPort1.Read(data,3); //CString wert_string; //wert_string.AppendFormat(_T("%i"),MAKEWORD(data[2],data[1])); //Edit_Fuss.SetWindowTextW(wert_string); }
Ich bekomme aber keine Message!
-
Wie kann man den diese ON_WM_SERIAL Nachricht mithilfe eines Assistenten hinzufügen? Ich glaube, dass da noch irgendwas fehlt, ich weiss aber nicht was!
Bitte helft mir!
-
Was hast Du denn für ein Projekt? MDI? Bist Du sicher, dass Daten ankommen? Änder doch auch noch ON_WM_SERIAL(OnSerialMsg) nach ON_WM_SERIAL(&CMFC_Test_1View::OnSerialMsg)
-
Nein ich habe eine SDI Anwendung.
Wenn ich an den µC den das Byte 0xA3 schicke dann antwortet dieser mit z.B. 0xA3 0x01 0x23. Ich weiss auch dass das funktioniert, da das ganze auch ankommt, wenn ich z.B. das hier mache:void CMFC_Test_1View::OnBnClickedButton5() { // TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein. unsigned char achse, data[3]; achse=0xA3; myPort1.Write(&achse,1); myPort1.Read(data,3); CString wert_string; wert_string.AppendFormat(_T("%i"),MAKEWORD(data[2],data[1])); Edit_Fuss.SetWindowTextW(wert_string); }
Nur wird auch hierbei keine Message ausgelöst.
NACHTRAG: Ich habe ON_WM_SERIAL(&CMFC_Test_1View::OnSerialMsg) geschrieben und es geht trotzdem nicht. Der Breakpoint bei der Funktion CMFC_Test_1View::OnSerialMsg(...) wird nicht erreicht.