Kann jemand bitte einen einfachen Code posten, der konvertieren würde,
System::String^
Zu,
C ++ std::string
Dh ich möchte nur den Wert von, zuweisen
String^ originalString;
Zu,
std::string newString;
string
c++-cli
managed-c++
Sivabudh
quelle
quelle
Sie können dies einfach wie folgt tun
quelle
Das hat bei mir funktioniert:
quelle
Hier sind einige Konvertierungsroutinen, die ich vor vielen Jahren für ein c ++ / cli-Projekt geschrieben habe. Sie sollten trotzdem funktionieren.
quelle
Ich habe eine einfache Möglichkeit gefunden, einen std :: string aus einem String ^ zu erhalten, indem ich sprintf () verwende.
Sie müssen die Marschallfunktionen nicht aufrufen!
UPDATE Dank Eric habe ich den Beispielcode geändert, um die Größe der Eingabezeichenfolge zu überprüfen und einen Pufferüberlauf zu verhindern.
quelle
Ich habe stundenlang versucht, einen Windows Form Listbox ToString-Wert in eine Standardzeichenfolge zu konvertieren, damit ich ihn mit fstream zur Ausgabe in eine txt-Datei verwenden kann. Mein Visual Studio enthielt keine Marschall-Header-Dateien, die von mehreren Antworten verwendet wurden. Nach so viel Versuch und Irrtum fand ich endlich eine Lösung für das Problem, das nur System :: Runtime :: InteropServices verwendet:
Und hier ist die MSDN-Seite mit dem Beispiel: http://msdn.microsoft.com/en-us/library/1b4az623(v=vs.80).aspx
Ich weiß, dass es eine ziemlich einfache Lösung ist, aber ich brauchte STUNDEN, um Fehler zu beheben und mehrere Foren zu besuchen, um endlich etwas zu finden, das funktioniert.
quelle
C # verwendet das UTF16-Format für seine Zeichenfolgen.
Neben der Konvertierung der Typen sollten Sie sich auch des tatsächlichen Formats der Zeichenfolge bewusst sein.
Beim Kompilieren für einen Multi-Byte-Zeichensatz setzt Visual Studio und die Win-API UTF8 voraus (eigentlich Windows- Codierung, Windows-28591 ).
Beim Kompilieren für den Unicode-Zeichensatz nehmen Visual Studio und die Win-API UTF16 an.
Sie müssen also die Zeichenfolge auch vom UTF16- in das UTF8-Format konvertieren und nicht nur in std :: string konvertieren.
Dies ist erforderlich, wenn Sie mit Formaten mit mehreren Zeichen wie einigen nicht-lateinischen Sprachen arbeiten.
Die Idee ist zu entscheiden, dass
std::wstring
immer UTF16 repräsentiert .Und repräsentiert
std::string
immer UTF8 .Dies wird vom Compiler nicht erzwungen, sondern ist eher eine gute Richtlinie.
Oder haben Sie es in einer kompakteren Syntax:
quelle
Ich halte mich gerne vom Marshaller fern.
Scheint mir viel sauberer und schneller zu sein. Sie müssen sich keine Gedanken über das Erstellen und Löschen eines Kontexts machen.
quelle
// Ich habe VS2012 verwendet, um den folgenden Code zu schreiben: convert_system_string to Standard_Sting
quelle