BYTE zu einem CString konvertieren und in Listbox ausgeben
-
Sorry,
habe ich aus Gedächnis geschrieben. Mit str ist die Membervariable des Listboxsteuerelementes gemeint, also m_str.
habe die Version str.Format(_T("%c"),Byte) probiert. zeigt mir die Bytes aber nicht richtig an.Geht sequentiell die Ascii-Tabelle durch.
zu Chris:
Die Fehlermeldung lautet wie folgt:
error C2668: 'ATL::CStringT<BaseType,StringTraits>::__ctor':
Mehrdeutiger Aufruf einer überladenen Funktion
with
[
BaseType=char,
StringTraits=StrTraitMFC_DLL<char>
]
and
i [
BaseType=char,
StringTraits=StrTraitMFC_DLL<char>
]
-
Ich erweitere Draveres code mal

//str = membervar von dem ListCtrl CString Text; Text.Format("%c", wParam); //ist besser als CString Text((BYTE)wParam)); str.AddString(Text);
-
Hi ,
klappt auch nicht
Selbe Ausgabe wie bei Dravere.hmm!
-
Das ist eine komische Meldung, die habe ich noch nie gesehen.
Du verwendest wirklich MFC?Deine Listbox ist wirklich eine CListBox. (Kein Pointer, keine ähnliche Klasse?)
Was passiert, wenn du statt dem AddString mal testweise diese Zeile nimmst:AfxMessageBox(Text); // Nach den zwei ersten Zeilen von Chris++
-
Du solltest vieleicht mehr Code (den wichtigen Teil der Funktion und des Aufruf's) posten. Ausserdem: welchen Wert hat wParam denn, welchen Wert muss es haben und vor allem was erwartest du in der Ausgabe?
-
ja, die Listbox ist eine CListBox.
mit afxmessagebox klappt die ausgabe komischerweise.
aber mit m_ausgabe.AddString(str) nicht.m_ausgabe ist von der Kategorie Controll.
-
UINT ReadThread(LPVOID pParam){ DWORD dwBytesTransferred; DWORD iBytesWritten =0; CString writestring("4\r"); GetCommModemStatus(hPort,&dwCommModemStatus); TRACE("HIER IN READ!!!!!!!!!!!!!!!\n"); // Specify a set of events to be monitored for the port. while(INVALID_HANDLE_VALUE != pParam){ int i=0; // Re-specify the set of events to be monitored for the port. SetCommMask(hPort, EV_RXCHAR | EV_CTS | EV_DSR | EV_RING); // Loop for waiting for the data. if (dwCommModemStatus & EV_RXCHAR) do{ // Read the data from the serial port. ReadFile(hPort, &Byte, 1, &dwBytesTransferred, 0); // Display the data read. if (dwBytesTransferred == 1 ){ TRACE("BYTE erhalten!!!!!!!!!!!!!!!!!%c!!\n",Byte); ::PostMessage((HWND)pParam,WM_READED,(WPARAM)Byte,0); ::WaitForSingleObject(g_eventContinue,INFINITE); } } i++; if(i==100){ WriteFile(hPort,writestring,1,&iBytesWritten, NULL); TRACE("WRITEFILE HAT GESCHREIBEN!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); } }while(dwBytesTransferred == 1); } // Retrieve modem control-register values. GetCommModemStatus(pParam,&dwCommModemStatus); return 0; } LRESULT CRS323_desk_1Dlg::OnMyMessage(WPARAM wParam, LPARAM lParam){ TRACE("!!!!!!!!!!!!!!!!!!Nachricht erhalten!!!Byte=%c \n",(BYTE)wParam); str.Format(("%c"),wParam); //AfxMessageBox(str); m_ausgabe.AddString(str); UpdateData(FALSE); g_eventContinue.SetEvent(); return 0; }Edit by estartu: Bitte benutze Codetags.

-
http://www.codecomments.com/archive292-2005-5-494112.html
Ist alles was ich bisher dazu gefunden habe. Allerdings kann ich das da oben nicht mit dem im Link zusammenführen. Vielleicht kann das aber jemand der erfahreren hier drin

Grüssli
-
Danke dir Dravere,
Danke auch an dich Chris
schaue mal rein
-
Hallo,
was steht den in dem BYTE drin ? Ist es ein Textzeichen oder alles möglich (auch Steuerzeichen), also ich gebe meine Byte immer so aus (die allerdings keine Textuelle bedeutung haben sondern befehl bytes sind) :WPARAM DeinByte; CString sOut; sOut.Formated("%02X",(BYTE)DeinByte); m_ausgabe.AddString(sOut); ..Hab so was ähnliches Programmiert, meine Ausgabe im List Fenster sieht z.b. so aus
10:58:34,828 [1] <-- 00 00 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10:58:34,890 [1] --> 00 00 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10:58:34,937 [1] <-- 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10:58:34,984 [1] --> 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10:58:35,015 [1] <-- 00 02 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
10:58:35,078 [1] --> 00 02 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0FWobei hier natürliche mehrere Bytes gesendet und empfangen (loop back) werden.
Die ausgabe erfolgt ebenfalls durch eine vom Empfangsthread gesendete Message, wobei als LPARAM die Position in einer CMap übergeben wird, dort stehen dann die Daten.gruss
Marcus
-
Dravere
In deinem Link steht doch nur das TCHAR in Unicode als wchar_t sonnst als char definiert ist... das heißt: Schreib anstelle von (TBYTE) einfach (TCHAR)(TBYTE)
Weiß nicht ob die Anzeige dann stimmt und ob der dir das so abnimmt...