Was ist da Verkehrt ??
-
was ist da Verkehrt, oder wass muss ich anders machen
MessageBoxW(NULL,TEXT(string(buf).c_str()[string(buf).length()]),TEXT("Server Message"),MB_OK);
Fehler 1 error C2228: Links von ".c_str" muss sich eine Klasse/Struktur/Union befinden. c:\dokumente und einstellungen\admin\desktop\loadbg\socketserver\socketserver\main.cpp 70 Fehler 2 error C3861: "Lstring": Bezeichner wurde nicht gefunden. c:\dokumente und einstellungen\admin\desktop\loadbg\socketserver\socketserver\main.cpp 70
-
Der Ausdruck
string(buf).c_str()[string(buf).length()];
liefert normalerweise ein char(0), da der Index 'string(buf).length()' genau hinter den Nutzstring und damit auf die abschließenden '0' zeigt.
Der erste Compiler-Fehler weißt darauf hin, dass #include <string> oder using namespace std; vergessen wurde. Der zweite kommt von dem Text-Makro. Dieses Makro ist nur für String-Literale gedacht. Zum Beispiel TEXT("Ein String").
Wenn Du in einer MFC-Umgebung eine automatische Anpassung des std::string an das sogenannte Unicode-Flag haben möchtest, so kannst Du auch
typedef std::basic_string< TCHAR > tstring;
schreiben und tstring statt std::string benutzen. Aber man sollte vorsichtig damit umgehen. Es ist nicht immer notwendig aus allen Strings wchar_t-Strings zu machen.
Gruß
Werner@Edit: Tippfehler
-
Und wie muss ich dass dann machen ??
so ??
MessageBoxW(NULL,basic_string< string(buf).c_str() >,TEXT("Server Message"),MB_OK);
-
typedef std::basic_string< TCHAR > tstring; tstring txt = TEXT("Hallo Welt"); MessageBox( NULL, txt.c_str(), TEXT("Server Message"), MB_OK);
.. oder so
Falls Du MessageBoxW benutzt, so musst Du immer std::wstring hernehmen.Gruß
Werner
-
Hi, sorry ich glaub ich bin zu dumm dazu .
typedef std::basic_string< TCHAR > tstring; tstring text = TEXT(string(buf).substr(0,empfBytes).c_str()); MessageBox(NULL,text.c_str();,TEXT("Server Message"),MB_OK);
So dass kann doch nicht sein etwa 7 Fehler.
-
Und so kommt Lbuf nich deklarierter Bezeichenr
typedef std::basic_string< TCHAR > tstring; tstring text = TEXT(buf); MessageBox(NULL,text.c_str(),TEXT("Server Message"),MB_OK);
-
Wie Werner Salomon schon sagte, das TEXT-Makro ist für Stringliterale gedacht. Du hast zwar nicht geschrieben, was buf ist, aber ein Stringliteral ist es jedenfalls nicht.
-
Hi hier dass moechte ich damit Anstellen
do { char buf[1024]; empfBytes = recv(connectedSocket,buf,1024,0); if(string(buf).substr(0,empfBytes) != "shutdown") { typedef std::basic_string< TCHAR > tstring; tstring text = TEXT(buf); MessageBox(NULL,text.substr(0,empfBytes).c_str(),TEXT("Server Message"),MB_OK); }break; } while(a!=5);
Die ueber den Socket empfangegnen char Bytes moechte ich ganz einfach in einer Message Box ausgeben.
-
manchmal sind die Dinge einfacher als man glaubt
do { char buf[1024]; const int empfBytes = recv( connectedSocket, buf, sizeof(buf)-1, 0 ); buf[empfBytes] = char(0); // String-Ende sicher setzen if( string(buf) != "shutdown" ) { MessageBox( NULL, buf, TEXT("Server Message"), MB_OK ); } else break; } while( a!=5 ); // was ist 'a'?
Sollte funktionieren, solange Du die Applikation ohne Unicode übersetzt und nur ASCII-Daten also lesbare Zeichen über die Socket--Schnittstelle reinkommen.
Gruß
Werner
-
Leider nicht , es gibt da noch ein Problemchen :-
do { char buf[1024]; const int empfBytes = recv(connectedSocket,buf,sizeof(buf)-1,0); buf[empfBytes] = char(0); if(string(buf).substr(0,empfBytes) != "shutdown") { cout << string(buf).substr(0,empfBytes); MessageBox(NULL,buf,TEXT("Server Message"),MB_OK); }break; } while(a!=5);
Fehler 1 error C2664: 'MessageBoxW': Konvertierung des Parameters 2 von 'char [1024]' in 'LPCWSTR' nicht möglich c:\dokumente und einstellungen\admin\desktop\loadbg\socketserver\socketserver\main.cpp 74
-
Wie kann ich machen dass nich Unicode uebersetzt wird ??
Ich arbeite mit microsoft visual c++.
-
Werner Salomon schrieb:
Sollte funktionieren, solange Du die Applikation ohne Unicode übersetzt
Ich arbeite mit microsoft visual c++.
Welche Version genau?
-
Werner Salomon schrieb:
Sollte funktionieren, solange Du die Applikation ohne Unicode übersetzt ..
und wer lesen kann, ist im Vorteil
Um diesen String in die MessageBox zu schreiben musst Du ihn erst nach Wide-Character konvertieren.
do { char buf[1024]; const int empfBytes = recv( connectedSocket, buf, sizeof(buf)-1, 0 ); buf[empfBytes] = char(0); // String-Ende sicher setzen if( string(buf) != "shutdown" ) { USES_CONVERSION; MessageBox( NULL, A2T(buf), TEXT("Server Message"), MB_OK ); } else break; } while( a!=5 ); // was ist 'a'?
Zu den Details frag' bitte im MFC-Forum nach. .. und lass die substr-Aufrufe weg; in diesem Fall sind die überflüssig.
Gruß
Werner
-
@Werner Salomon
Funktioniert leider nicht
Fehler 1 error C2065: 'USES_CONVERSION': nichtdeklarierter Bezeichner c:\dokumente und einstellungen\admin\desktop\loadbg\socketserver\socketserver\main.cpp 73 Fehler 2 error C3861: "A2T": Bezeichner wurde nicht gefunden. c:\dokumente und einstellungen\admin\desktop\loadbg\socketserver\socketserver\main.cpp 74
Microsoft Visual C++ 2005
-
Meine Loesung die Leider das Programm zum abstürtzen bringt:
wchar_t* text; mbstowcs(text,buf,1024); MessageBox(NULL,text,TEXT("Server Message"),MB_OK);
-
Sei doch nicht so unselbstständig!
Wenn der dir so ne Fehlermeldung raushaut ist es ja wohl das mindeste mal eben selber in die MSDN zu schauen.
Was dir fehlt ist nen include von atlconv.h.
A2W ist aber MFC Kram.Ist das überhaupt ne MFC Anwendung?Bei VS 2005 sind die Projekte per default auf Unicode eingestellt.
Das kannst du unter:
Projekt->Eigenschaften->Konfigurationseigenschaften->Allgemein ändern.
Einfach unter Projektstandards->Zeichensatz "nicht festgelegt" auswählen.
Damit läufst du aber nur vor deinem Problem weg.....und wer wegläuft ist feigeMfG Spacelord
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ 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.