wathlon Geschrieben 15. Januar 2003 Geschrieben 15. Januar 2003 Hallo, ich habe noch einmal ein Frage und hoffe auf eine Antwort. Ich konvertiere einen CString zu einem LPSTR. Jedoch ist der LPSTR jetzt Unicode. Wie kann ich bewirken, dass der LPSTR ASCII wird oder ist? CString i1 = "Hallo Welt"; LPSTR str = "Danke"; int nLen = i1.GetLength(); LPSTR lpszBuf = i1.GetBuffer(nLen); str = lpszBuf; i1.ReleaseBuffer(); return str; Vielen Dank für die Hilfe! Gruß Wathlon
Klotzkopp Geschrieben 15. Januar 2003 Geschrieben 15. Januar 2003 Wie kommst du darauf, dass der String Unicode ist, bzw. wie äußert sich das? Übrigens hast du ein Speicherproblem: The address returned by GetBuffer may not be valid after the call to ReleaseBuffer since additional CString operations may cause the CString buffer to be reallocated. ... The buffer memory will be freed automatically when the CString object is destroyed.
wathlon Geschrieben 15. Januar 2003 Autor Geschrieben 15. Januar 2003 Hallo, wie ich darauf komme? Ganz einfach. Das ganze ist in einer dll, die von einem Delphi-Programm aufgerufen wird. Und dort kommt nur das Y mit diesem Punkt an, welches ich auch erhalte, wenn ich Unicode-Dateien öffne (und zwar als erstes Zeichen). Für meine Begriffe kann es nur ein Problem zwischen Unicode und ASCII sein. Ich habe meine Erfahungen, welche ich gesammelt habe, versucht mit den Ergebnissen, die mir vorliegen in verbindung zu bringen. Gruß Wathlon
Klotzkopp Geschrieben 15. Januar 2003 Geschrieben 15. Januar 2003 Originally posted by wathlon Das ganze ist in einer dll, die von einem Delphi-Programm aufgerufen wird. Und dort kommt nur das Y mit diesem Punkt an, welches ich auch erhalte, wenn ich Unicode-Dateien öffne (und zwar als erstes Zeichen).Das ist schon was anderes. Da ist jetzt nämlich die Frage, wie die Daten in das CString-Objekt kommen. Wenn du nämlich einen normalen CString mit Unicode fütterst, nimmt er nur das erste Zeichen auf. Also zeig uns bitte den echten Code, kein Beispiel, von dem du glaubst, dass es den Fehler erkennbar oder reproduzierbar macht. Da liegt man leider meistens falsch.
wathlon Geschrieben 15. Januar 2003 Autor Geschrieben 15. Januar 2003 extern "C" LPSTR PASCAL EXPORT Aufruf (LPSTR inhalt, LPSTR inhalt2, int i) { CString i1 = inhalt; i1 = i1 + " "; i1 = i1 + inhalt2; CString i2; i2.Format ("%d",i); MessageBox(NULL,inhalt,i2,MB_OK); return i1; } Das ist der Code, Kein Beispiel, da ich derzeit am Testen bin. Ich erprobe und versuche zu lernen. Gruß Wathlon
Klotzkopp Geschrieben 15. Januar 2003 Geschrieben 15. Januar 2003 Wenn inhalt und inhalt2 tatsächlich Unicode sind, sollte das hier funktionieren: CString i1 = (LPCWSTR) inhalt; i1 = i1 + " "; i1 = i1 + CString( (LPCWSTR) inhalt2);[/CODE] CString hat einen impliziten Konstruktor für Unicode-Strings, der eine Umwandlung vornimmt. Der wird aber nur verwendet, wenn der Datentyp auch Unicode entspricht. Daher die casts auf LPCWSTR (entspricht const unsigned short*).
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden