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 Zitieren
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. Zitieren
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 Zitieren
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. Zitieren
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 Zitieren
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*). Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.