Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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.

Geschrieben

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

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

Geschrieben

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

Geschrieben

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*).

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...