Visual Studio 2005 String Problem
-
Hallo
ich hab mir grad das Visual Studio 2005 installiert und hab nun folgendes Problem:
früher konnte ich immer sowas hier machen:
MessageBox("Fehler",NULL,MB_OK);
wenn ich das jetzt im VS 2005 mache, fängt er mir an zu meckern
error C2664: 'CWnd::MessageBoxW': Konvertierung des Parameters 1 von 'const char [6]' in 'LPCTSTR' nicht möglich
dann muss ich erst sowas machen damit es rennt
CString Meldung; Meldung = "Fehler"; MessageBox(Meldung,NULL,MB_OK);
is das jetzt immer so oder kann man das irgendwo einstellen oder woran liegt es sont?
-
also wenn ich den Typecast davor setze (CString) funzt die sache wieder
voll komisch
-
Hallo,
MessageBox("Could not find any USB devices", "ERROR", 0);
Also wenn ich das so schreibe funktioniern diese Message Boxen bei mir auf Anhieb, jedoch hab ich anfangs auch schön gekämpft um mit den kleinen Änderungen vom 2005er zurechtzukommen
-
Ab VS2005 wird per default alles mit UNICODE übersetzt (was auch gut so ist)!
Deshalb:#include <tchar.h> MessageBox(_T("Fehler"), ...);
-
jo, danke euch
-
ker, der is ja mal voll empfindlich
wie mach ich denn CString in const char *
der macht mir die mysql_connect so net mehr, weil ich ihm da strings übergebe
andersrum kann ich die aber nicht gleich als const char * machen, weil er die daten aus einer ini holt
und die methoden der ini klasse geben cstring zurück
dann müsste ich ja alles komplett ummodern
-
War das jetzt eine Frage?
-
Du brauchst nichts "ummodern". Siehe hier: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmfc98/html/_mfc_cstring.3a3a.getbuffer.asp
-
MSS-Software schrieb:
wie mach ich denn CString in const char *
Jetzt hab ich die Frage gefunden
CString str; const char *szANSI = CT2CA(str);
-
das heißt jetzt, dass ich für MySQL jetzt alles mit GetBuffer machen muss?
ker, das mal verdammt viel
die ganzen MySQL abfragen, selektionen usw
gibts keine andere möglichkeit?
-
ah, zu spät gesehen
thx
-
Eigentlich sollte MySQL auch UNICODE können, sonst würde ich eine andere Datenbank nehmen
-
nö, so wie das grad ausschaut net
is irgendwo nen ding, was ich net verstehen kann
vielleicht is es die C-API die es net kann
keine ahnung
-
ich hab grad mal voll die probleme
der gibt mir nur noch ein zeichen zurück wenn der aus der INI liest
an der INI methode liegt das net
die hat vorher auch wunderbar gefunzt
is doch alles grad mal irgendwie mist
-
Das liegt vermutlich auch an dem Unicode... zeig doch mal bitte den Source, wie Du es einliest und wo Du es speicherst...
-
das sind 2 dateien
soll ich dir aufn server packen, damit du runterladen kannst und schauen? isn bissl viel für's posten
hab aber jetzt in den Projekteinstellungen den UNICODE Zeichensatz ausgestellt
funzt jetzt alles, aber wäre trotzdem net schlecht, wenn ich wüsste woran es liegt
-
Grundsätzlich solltest Du alles mit "TCHAR", "LPCTSTR", LPTSTR" machen... und keine casts verwenden! dann sollte es eigentlich gehen...
-
ja gut
ich werds mir zu herzen nehmen
danke dir
-
MYSQL zumindest ab V5 versteht UTF8. Das reicht denke ich für den Rest der Welt.
Wenn deine Funktionen für MySQL nur CString verstehen (MySQL-CAPI versteht CString sicher nicht) dann schreibe eine Wrapper um deine Funktionen denen Du eine CString gibst und die das dann als UNICODE umschreiben. Dann kannst du alle deine SQL-Querys noch immer verwenden bzw. deine ganzen Klassen welche MySQL verwenden.
-
Zu beachten ist aber dann, dass Du explizit nach UTF-8 umwandelst!
Also wirst Du um direkte Verwendung der WIdeCharToMultiByte nicht drum rum kommen...
PS: Man muss es aber der API auch mitteilen, welche Codepage (also hier UTF-8) man verwendet, sonst wird es wieder falsch interpretiert!)