kostenloser Webspace werbefrei: lima-city


System::string zu std::string konvertieren

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    y*o

    hey,

    folgendes Problem:

    ich will den Namen des zur Zeit angemeldeten Users als std::string bekommen.

    string Cuser = Environment::UserName;

    Leider geht dies nicht weil "Environment::UserName" ein System::string ist.
    Wie konvertiere ich das Ganze nun?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Das hängt vollkommen davon ab, welche Methoden die Klasse System::string hat. Und um welche Library handelt es sich hier überhaupt?
  4. Hallo yoo,

    theoretisch sollte es wie folgt gehe:

    1. Lese den Text als wchar_t aus der System::String::Chars Property
    http://msdn.microsoft.com/en-us/library/system.string.chars.aspx

    2. Konvertiere den Unicode-String (wchar_t-Array) mit WideCharToMultibyte in das gewünschte Encoding
    http://msdn.microsoft.com/en-us/library/dd374130%28v=vs.85%29.aspx
    http://www.flipcode.com/archives/Advanced_String_Techniques_in_C-Part_I_Unicode.shtml

    3. Erzeuge std::string aus dem resultierenden char-Array

    Kleine Frage am Rande: Warum willst Du CLI und natives C++ mischen? Selbst Microsoft nimmt davon Abstand und will den Support für sowas in Visual Studio entfernen (oder hat es in der 2010er Version bereits entfernt). Ich empfehle entweder vollständig natives C++ oder reines CLI/.Net zu verwenden. Damit spart man sich solche Klimmzüge.

    Edit:
    Der Vollständigkeit halber die native Lösung:
    #include <windows.h>
    
    int main()
    {
        char buffer[256];
        DWORD buffer_size = sizeof(buffer);
    
        GetUserName(buffer, &buffer_size);
        MessageBox(NULL, buffer, "Name:", MB_OK);
    
        return 0;
    }


    Beitrag zuletzt geändert: 31.5.2011 22:20:23 von darkpandemic
  5. Autor dieses Themas

    y*o

    also danke nochmal, es funktioniert jetzt.
    ich mach mit einem Freund ein Projekt. Wir basteln da schon seit Monaten immer wieder rum und irgendwie hat sich das so im Laufe der Zeit ergeben.
    Was kann da so passieren wenn man beides mischt?
  6. Hallo yoo,

    pragmatisch bzw. technisch gesehen passiert nichts. Und wenn euer Projekt schon weiter fortgeschritten ist, dann gibt es auch keinen Grund das zu ändern.
    Aber einen Punkt hast Du ja schon selber gesehen: das Konvertieren zwischen 'Automation Data Types' (aus der COM-Welt) CLI-Datentypen (.Net-Welt) und Standard-Datentypen (ISO-C/C++-Welt).
    Wenn man die Sachen mischt, dann muss man mit allem umgehen können und muss sich immer wieder damit auseinandersetzen, wie man die Sachen miteinander verbindet. Das kostet Zeit und macht den Code kompliziert.
    Im Allgemeinen analysiert man erst die Problemstellung und legt sich dann auf eine Technologie fest. Wenn es nicht zeitkritisch ist und die .Net-Plattform Vorteile für den Anwendungsfall bietet, dann würde ich vollständig in C#-Programmieren. Damit erspart man sich einerseits mögliche Kompatibilitätsprobleme, verhindert Fehler, die man mit C++ machen kann (z.B. Memory-Leaks, Heap-Corruptions, Casting-Fehler usw.) und unter Umständen fällt auch das Ausliefern der Software leichter, da man sich nur um eine Art von Runtime kümmern muss.
    Wenn ein Projekt besser mit C++ machbar ist, dann sollte man auf CLI verzichten, da das unter umständen Einfluss auf die Performance hat. Die Runtime muss ja managed und unmanaged Objekte verwalten und gleichzeitig noch darüber wachen, dass der native Code keine Schaden anrichtet. Dazu kommen wieder Konvertierungen.
    Ich würde C++/CLI eigentlich nur verwenden um unbedingt benötigte C/C++-Module in Assemblies zu kapseln um sie dann von C# aus verwenden zu können. In allen anderen Fällen macht es die Festlegung auf eine Technologie einfacher, übersichtlicher und wartbarer.
  7. s********4

    drakesoft schrieb:
    das geht so ...
    string bla;
    bla.c_str(); // <= ist dann der string als char array


    Das ist aber kein System::string... und hat damit absolut nix zu tun :D.
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!