Forum: PC-Programmierung CString über Schnittstelle


von Dennis X. (Gast)


Lesenswert?

Hallo PC-Programmierer,

ich sitze gerade vor dem VS10 und mache ein Projekt mit den MFC´s.
Jetzt habe ich in einem anderen Forum gelesen, dass ich einen CString so 
umwandeln kann:

  LPCSTR sending_data = (LPCSTR)(LPCTSTR)cstrCommand;

Den LPCSTR sending_data schicke ich an eine Funktion, welchen den über 
die Serielle Schnittstelle ausgibt.
Doch beim Debugging merke ich, dass aus einem Wort, bsp.: "Hallo" nur 
ein "H" übrig bleibt.

Ich sehe im Debugging bei der Variable noch "Bad Ptr" Was hat das zu 
bedeuten?

Ich hoffe jemand weiß mir Rat, danke schonmal!

Dennis


EDIT: Ich bin derzeit der Meinung es geht einfach nicht, ich hab jetzt 
schon X Möglichkeiten ausprobiert! Irgendwie muss es doch aber möglich 
sein oder? Ich hab einen x-beliebigen Text als CString und möchte den 
einfach über die Serielle Schnittstelle senden. Die verlangt nunmal 
einen LPCSTR...

von Karl H. (kbuchegg)


Lesenswert?

Höchst wahrscheinlich hast du ein Unicode Projekt.
Du musst erst mal den Unicode String auf einen normalen ASCII String 
zurückkonvertieren.
Google ist dein Freund.

von Dennis X. (Gast)


Lesenswert?

1
/// UMWANDLUNG
2
    int count = cstrCommand.GetLength();
3
    char* c = new char[count + 1];
4
    for(int j = 0; j < count; j++)
5
  {
6
       c[j] = static_cast<char> (* cstrCommand.Mid(j, 1));
7
    }
8
    c[count] = '\0';
9
  LPCSTR sending_data = LPCSTR(c);
10
//// UMWANDLUNG ENDE

Mit diesem Code ist es möglich einen UNICODE Strng zu einem normalen 
ASCII String zu formen!
Hab den soeben im Internet gefunden!

DANKE Karl Heinz!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Viel einfacher wäre es, auf die vermutlich unnötige Nutzung von 
16-Bit-Unicode zu verzichten und stattdessen in den Projekteinstellungen 
"Multibyte" zu verwenden - da ist ein Zeichen 8 Bit groß ...

von Arc N. (arc)


Lesenswert?

Oder CW2A bzw. W2A könnte man auch verwenden
http://msdn.microsoft.com/en-us/library/87zae4a3(v=VS.100).aspx

von Dennis X. (Gast)


Lesenswert?

Naja okay ihr habt mögt recht haben, dennoch habe ich mit der klasse 
cstring eine tolle klasse für strings, welche mir auch einige funktionen 
bietet auf die ich ungern in meinem programm verzichten möchte.
Und die umwandlung dauert jetzta auch nicht so lange.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Dennis X. schrieb:
> Naja okay ihr habt mögt recht haben, dennoch habe ich mit der klasse
> cstring eine tolle klasse für strings,

Was hat das eine mit dem anderen zu tun? CString funktioniert auch, wenn 
kein Unicode verwendet wird, und dann kannst Du Dir den Aufwand mit der 
"Umwandlung" sparen.

von Dennis X. (Gast)


Lesenswert?

Hmm okay, das muss ich dann beim anlegen des projekts einstellen oder 
kann ich das nachträglich auch noch machen?
Jedenfalls geht die funktion jetzt so. Ich schau nacher mal ob es da 
einstellmoglichkeiten gibt.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Dennis X. schrieb:
> kann ich das nachträglich auch noch machen?

Natürlich. Projekteigenschaften anzeigen lassen, "Configuration 
Properties"->General und dort unter "Character Set" anstelle von 
"Unicode" "Multi-Byte" eintragen. Einmal komplett übersetzen und fertig.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.