class CString nach const char * nicht moeglich
-
Ich erhalte beim Kompilieren immer folgenden Fehler:
Konvertierung des Parameters 1 von 'class CString' in 'const char *' nicht moeglichHabe es bereits mit verschiedenen Varianten versucht! (_T,LC..., etc) jedoch führte bis jetzt nichts zum Ziel!
Kann mir jemand sagen, wie ich diesen Fehler "beseitigen" kann?
-
Zeig doch mal den Code...
Was Du vermutlich machen willst, geht so:
CString str(_T("hello world"); const char *szAnsi = CT2CA(str);
-
Nei funktioniert auch nicht!
Hier nun mal mein Code:CString s_dateiname; s_dateiname=Printf.protokollladen(cfd.GetPathName(),1); if (Printf.CheckFile(CT2CA(s_dateiname))==0) { }Funktion CheckFile:
int CheckFile(LPCSTR Name)wenn ich das CT2CA einsetze bekomme ich folgenden Fehler:
CT2CA' : nichtdeklarierter Bezeichner
-
Welchen Compiler verwendest Du? VC6?
Dann nimm T2CA!
Vorher USES_CONVERSION definieren und wenn noch nicht passiert tchar.h einbinden.CString str(_T("hello world"); const char *szAnsi = CT2CA(str);Gefährlicher Code. szAnsi ist in der näcshten Zeile schon wieder undefiniert...

-
Martin Richter schrieb:
CString str(_T("hello world"); const char *szAnsi = CT2CA(str);Gefährlicher Code. szAnsi ist in der näcshten Zeile schon wieder undefiniert...

War ja nur ein Beispiel
besser wäre:printf("Ansi: %s", CT2CA(str));oder
char *szAnsi = strdup(CT2CA(str)); // ... free(szAnsi);
-
Jochen Kalmbach schrieb:
War ja nur ein Beispiel
besser wäre:Ich weiß, dass Du es weißt!

Aber hier in dem Forum wird soviel ungefragt und unbedacht per Copy&Paste übernommen, dass man wirklich vorsichtig sein muss...
-
Und warum nicht CString::GetBuffer(...)?
-
Vielen Dank!
Ich habe jedoch nun noch folgendes Problem!
In diesem Abschnitt:
HGLOBAL hGlobal = NULL; HRSRC hSource = NULL; LPVOID lpVoid = NULL; int nSize = 0; if(m_IPicture != NULL) FreePictureData(); // Important - Avoid Leaks... hSource = FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE(ResourceName), T2CA(ResourceType)); //FEHLER!!bekomme ich folgenden Fehler:
C:\C++\ADS2\Picture.cpp(161) : error C2440: '=' : 'const char *' kann nicht in 'const unsigned short *' konvertiert werdenWie bringe ich diesen Fehler weg???
-
Tester2 schrieb:
Und warum nicht CString::GetBuffer(...)?
Weil GetBuffer ein LPTSTR zurückliefert und kein LPSTR!
Und es scheint so als ob LPTSTR bei seinen Einstellungen in Wahrheit LPWSTR ist; sonst wäre die Fehlermeldung am Anfang gar nicht gekommen
addict schrieb:
hSource = FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE(ResourceName), T2CA(ResourceType));
Was ist denn "ResourceType"???
Wie gerade schon gesagt: Du verwendest AFAIK Unicode! Wenn Du mit CString und TCHAR arbeitest solltest Du nie konvertieren müssen und dann hast Du auch nie so ein Problem...
-
Ich habe früher mit CString gearbeitet und nun in den Projekteinstellungen auf UNICODE geändert... Seit dann erscheinen diese Fehlermeldungen...
ResourceType ist LPCSTR ResourceType
Was muss ich den konkret ändern?
-
Lass den cast weg, dann geht es!
-
Wenn ich ihn weglasse, kommt dieser Fehler:
C:\C++\ADS2\Picture.cpp(161) : error C2664: 'FindResourceW' : Konvertierung des Parameters 3 von 'const char *' in 'const unsigned short *' nicht moeglichDer Aktuelle Code:
hSource = FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE(ResourceName), ResourceType);
-
addict schrieb:
ResourceType ist LPCSTR ResourceType
Was muss ich den konkret ändern?
Wenn du UNICODE-tauglich arbeiten willst, dann bitte komplett - und das bedeutet, du müsstest den Typ ändern auf
LPCTSTR ResourceType;(oder war's LPTCSTR? Mußt du ausprobieren).
-
CStoll schrieb:
Wenn du UNICODE-tauglich arbeiten willst, dann bitte komplett - und das bedeutet, du müsstest den Typ ändern auf
LPCTSTR ResourceType;(oder war's LPTCSTR? Mußt du ausprobieren).LPCTSTR