BYTE zu einem CString konvertieren und in Listbox ausgeben
-
Hi,
versuche ein BYTE in ein CSTring umzuwandeln und anschliessend den CString in einer Listbox mit AddString auszugeben. Könnte mir jemand vielleicht einen Tip geben ?
Komme nicht weiter .Vielen Dank
-
Probier mal
BYTE wert= andererWert; CString Text(irgendeinwert); //oder Text = CString(Wert);
-
Hi Chris,
das Problem ist, dass ich über Postmessage ein Byte übergeben will und anschliessend in einem Thread via Addstring ausgeben will.
Im Thread;
BYTE Byte;
Postmessage((HWND)pParam, WM_EIGENENACHRICHT,(WPARAM)Byte,0)Im eigenen Messagehandler des Hauptdialoges
TRACE("BYTE = %c",(BYTE)wParam) //zeigt er seltsamerweise im Debugfenster anaber
CString str((BYTE)wParam)
str.Addstring(str);akzeptiert er nicht , da es keine überladene funktion dazu gibt
gibt es keine andere Möglichkeit ? Muss ich notfalls selber überladen oder gibt es schon etwas fertiges ?vielelicht sogar eine alternative zu addstring?
Danke für die Antwort
-
Poste mal die genaue Fehlermeldung... Mit welchem Steuerelement willst du str ausgeben?
EDIT:
äh...
CString str((BYTE)wParam) //wenn du das machst, dann steht der Wett von wParam schonlängst im CString Objekt str //str.Addstring(str); unnötig, ausserdem hat CString gar keine Memberfunktion Addstring
-
str.Addstring(str);Die Zeile ist ja auch Blödsinn.
Deine Listbox wird wohl kaum "str" heißen.
-
BYTE byte; // Dein Byte-Wert CString str; str.Format(_T("%c"), byte); // Wenn es als Zeichen dargestellt werden soll. str.Format(_T("%d"), byte); // Wenn es als Zahl dargestellt werden soll.Grüssli
-
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...