'class CString' to 'const char *', FAQ half nicht
-
Hi Leute
mein Compiler meckert bei der Zeile:he=gethostbyname(cs_hostname); if (he==NULL) { dw_Error=WSAGetLastError(); }cs_hostname ist ein CString, he ein Pointer auf HOSTENT und dw_Error ein DWORD.
Nun sagt mein Compiler:
error C2664: 'gethostbyname' : cannot convert parameter 1 from 'class CString' to 'const char *'Ich mein okay, er will eben statt cstring einen char, nun hab ich in der FAQ geschaut (http://www.c-plusplus.net/forum/viewtopic-var-t-is-39103.html)
Aber beide Methoden haben nicht funktioniert
he=gethostbyname((LPCTSTR)cs_hostname); if (he==NULL) { dw_Error=WSAGetLastError(); }Fehler:
'gethostbyname' : cannot convert parameter 1 from 'const unsigned short *' to 'const char *'Kann mir jemand einen Hinweis geben wie ich doch noch den Hostnamen auflösen kann? Ich habe auch schon versucht mit einer Schleife den CString in einen char zu wandeln, aber da war ich mir z.B. nicht sicher ob der das korrekt macht und ob \0 mitkopiert wird, weil der debugger hat da nur Quark ausgegeben.
Gruß Basti
-
gethostbyname() erwartet keinen TCHAR-String, sondern einen char-String. Und für diese Umwandlung gibt es Hilfsmakros wie T2A():
USES_CONVERSION;//am Anfang der Funktion ... he=gethostbyname(T2A(cs_hostname)); if (he==NULL) { dw_Error=WSAGetLastError(); }PS: Eine Alternative wäre es evt., mit std::string zu arbeiten. (woher bekommst du denn den Hostnamen?)
-
danke, werd es gleich mal testen

und den hostnamen bekomme ich daher:
m_edit_eingabe.GetLine(0, cs_eingabe.GetBuffer(m_edit_eingabe.LineLength(0)),25); cs_eingabe.ReleaseBuffer(); int i_pos=cs_eingabe.Find(':',0); if (i_pos!=0) { cs_hostname=cs_eingabe; cs_hostname.Delete(i_pos,(i_length - i_pos)); ...das is also ein CString, der aus einem editfeld kommt
Das dumme is wenn ich jetzt wieder andere Typen verwende bekomm ich wieder probleme mit der Unicode umgebung und und und, mir wurde (hier im Forum) schon empfohlen soweit es möglich ist bei CStrings zu bleiben
//edit:
error C2501: 'USES_CONVERSION' : missing storage-class or type specifiers, wenn es so ziemlich am Anfang der Datei steht und am Anfang der main Funktion gibts den fehler undeclared identifier
Benutze embedded Visual C++ 4.0, in unicodeumgebung
-
sebastian87 schrieb:
//edit:
error C2501: 'USES_CONVERSION' : missing storage-class or type specifiers
???????????Hmm, normalerweise ist USES_CONVERSION ein Hilfsmakro, das einige Variablen für die späteren Stringumwandlungen deklariert - scheint aber nicht in Embedded-Umgebung zu funktionieren. Oder du hast vergessen, den nötigen Header (müsste <ATLCONV.H> sein) einzubinden.
-
ok danke, hat soweit geklappt

nur das dumme is jetz, dass er bei
rc=startWinSock(); meldet dass rc==0int startWinSock(void) { WSADATA wsa; return WSAStartup(MAKEWORD(2,0), &wsa); }das is die Funktion dazu, und der restliche Code:
he=gethostbyname(T2A(cs_hostname)); if (he==NULL) { dw_Error=WSAGetLastError();hier liefert der debugger mir he==NULL und dw_Error ist 10093, was heist dass WSAStartUp() nicht ausgeführt wurde, aber rc==0 sagt mir doch eigentlich genau das Gegenteil?!