Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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.

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

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

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

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

Danke!

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.