CSTRING char*



  • Hier zu meinem Problem.
    Ich versuche verzweifelt einen CString auf einen char* zu konvertieren.
    Problem dabei weder die in der msdn Google: site:msdn.microsoft.com http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmfc98/html/_mfc_cstring.3a3a.operator_lpctstr.asp
    angegebenen code beispiele noch diverse andere Sachen haben nicht geholfen!
    Der Compiler meckert immernoch

    error C2664: 'SendString' : cannot convert parameter 1 from 'const unsigned short *' to 'char *'

    Meine Frage was mach ich falsch?ich denke die msdn Code Beispiele sollten zumindest funktionieren aber selbst diese tuns nicht, da auch hier der Compiler mit der oben genannten Fehlermeldung anspringt.

    Kann es eventuell sein das es an meiner Entwicklungsumgebung Microsoft Visual Embedded 4.0 liegt oder an Compiler Einstellungen?Oder hab ich eventuell irgendwelche Librarys nicht eingebunden?ich weißß einfach nicht mehr weiter nachdem ich schon die letzten 2 Stunden mit ausgiebigem google durchforsten verbracht habe und in jedem Forum die selben Lösungsansätze beschrieben sind welche aber alle zu einem Compiler Fehler bei mir führen....

    Hoffe ihr könnt mir helfen

    mfg Brok3r



  • bei char hab ich auch so immer meine probleme aber

    CString str = "Das Knallt";
    char *cChar = new char[strlen(str)+1];
    strcpy(cChar ,str);

    oder

    char cChar[11];
    strcpy(cChar ,str);

    oder

    LPCSTR lpChar;
    strcpy(lpChar,str);

    sollte doch einwandfrei klappen vorausgesetzt du hast die
    <string.h> includet

    mfg
    LowFly



  • CString str = "Hallo";
    char* str2 = str.GetBuffer();

    da musst du str2 auch nicht zerstören



  • Wie erwähnt hab ich leider alle deine beschriebenen Möglichkeiten getestet mit der Folge des Compiler Fehlers....
    Keine Ahnung ich kann es mir nicht erklären habe aber eben eine Möglichkeit gefunden die funktioniert hier der Code

    CString str = "BlaBlaBla";
    int nSize = str.GetLength();
    char *pAnsiString = new char[nSize+1];
    memset(pAnsiString,0,nSize+1);
    wcstombs(pAnsiString, str, nSize+1);
    .
    .
    .
    delete[] str;
    

    Leider find ich die Lösung nicht sehr schön aufgrund des manuell wieder freizugebenden Speicherbereiches...
    über den LPCSTR typecast wäre es bedeutend einfacher aber naja wie schon erwähnt tut er es nicht 😕



  • was haut an meiner Technik nicht hin? 😕 😮



  • t.b das die funktion GetBuffer() 1 Argument benötigt 😉
    GetBuffer(int length) z.B aber tuts leider auch nicht

    'initializing' : cannot convert from 'unsigned short *' to 'char *'
    

    ich liebe den Compiler 😡



  • LPCSTR sollte aber gehn wenn nicht hast du nen fehler im project das das verhindert

    alle von mir oben vorgeschlagene methoden funzen auf meinem system win xp & vc6

    und

    was haut an meiner Technik nicht hin?

    muss heisen
    str.GetBuffer(strlen(str));
    oder
    str.GetBuffer(str.GetLength());
    😉



  • Wie gesagt ich benutze Microsoft Embedded Visual C++ 4.0.
    Kann natürlich auch mit dem SDK welches ich für mein portables Gerät benötige auf dem Windows CE läuft mir einige Sachen verdreht hat. Wie auch immer ich habe eine funktion gefunden die funktioniert auch wenn sie nicht sehr "schön" ist....
    Danke aber trotzdem für die schnellen kompetenten Antworten



  • str.GetBuffer(strlen(str));
    

    Ja ne nicht wirklich 😉

    Im der aktuellen MFC Version wird die Length nicht mehr verlangt. In der 98gier Version schon: CString::GetBuffer (MFC 98)
    Wenn er aber sagt WinCE, dann: CString::GetBuffer (WinCE - MFC) bzw. CString::GetBuffer (WinCE - MFC 4). Was also auch unter WinCE funzen sollte 😉

    Wenn die Length verlangt wird dann GetLength und nichts anderes! (Zumindest wenn man den ganzen String haben will 😉 )



  • Wie der Compiler richtig bemerkt versucht du ein Unicode-String in einen MBCS zu wandeln.

    Abhilfe ist, entweder statt des char ein TCHAR (wchar_t) zu benutzen, oder den Unicode-String in einen MBCS-Wandeln.

    Wandeln einfach:

    ...
    USES_CONVERSION;
    
    CString sMyString ( _T("gaga"));
    strcpy ( pszTarget, W2CA ( sMyString ) );
    ...
    

    Gruss BEamer



  • BEamer schrieb:

    USES_CONVERSION; W2CA

    Falls man ATL7 (oder später) hat, sollte man lieber CW2CA verwenden!


Log in to reply