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 moeglich
    

    Habe 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
    

  • Mod

    Welchen Compiler verwendest Du? VC6?
    Dann nimm T2CA!
    Vorher USES_CONVERSION definieren und wenn noch nicht passiert tchar.h einbinden.

    @Jochen:

    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:

    @Jochen:

    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);
    

  • Mod

    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 werden
    

    Wie 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 moeglich
    

    Der 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


Anmelden zum Antworten