Announcement

Collapse
No announcement yet.

_Tchar to String ^ Array

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • _Tchar to String ^ Array

    Hallo liebe Entwickler,

    wie immer habe ich zuerst die Suchenfunktion des Boards belästigt.

    Ich habe wieder mal ein Sonderproblem

    Vorher hatte ich eine Windows Forms Applikation.

    Der Aufruf sah so aus:

    int main(array<System::String ^> ^args)
    {
    // Aktivieren visueller Effekte von Windows XP, bevor Steuerelemente erstellt werden
    Application::EnableVisualStyles();
    Application::SetCompatibleTextRenderingDefault(fal se);


    if(args->Length != 0)
    {
    //umkopieren der Parameter die per Kommandozeile übergeben wurden


    String ^FileLoad, ^FileSave, ^GroupNo, ^ToSearch, ^Value;

    FileLoad = args[0];
    FileSave = args[1];
    }
    return 0;
    }

    soweit so gut.

    Nun sollte ich diese Applikation umbauen auf eine Kommandozeilen Application (ohne MFC)

    Nun sieht das ganze wie folgt aus:

    int _tmain(int argc, _TCHAR* argv[])
    {
    String ^FileLoad, ^FileSave;

    array<System::String ^> ^Parameter;

    FileLoad = _TCHAR::ToString((_TCHAR)argv[0]);
    FileSave = _TCHAR::ToString((_TCHAR)argv[1]);
    Parameter[2] = _TCHAR::ToString((_TCHAR)argv[2]);
    Parameter[3] = _TCHAR::ToString((_TCHAR)argv[3]);
    Parameter[4] = _TCHAR::ToString((_TCHAR)argv[4]);

    return 0;

    }

    Mein Problem ist, dass ich diesen _TCHAR weder in die normalen Strings bekomme und auch nicht in das String Array.

    Gibt es da eine Möglichkeit?

    Wäre toll wenn man die Typen von .net behalten könnte da ich im weiteren Programmablauf immer wieder welche verwende, und der Aufwand dies zu ändern sehr groß wäre...

  • #2
    Sol das jetzt eine C++/CLI (managed) oder eine reine C++ (klassisch unmanaged) werden?

    Die meisten Datentypen lassen sich nicht einfach zwischen managed und unmanaged Datentypen casten. Die Daten liegen nun mal auf verschiedenen Heaps und müßen explizit umgewandelt werden.
    Für string Typen guckst du z.B. hier

    Übrigens, außer zu Lern- und/oder Migrationszwecken, halte ich das mischen von managed und unmanaged Code für Unsinn.

    Comment


    • #3
      Vielen Dank, das hat mir sehr geholfen.
      Das mit dieser Vermischung war auch nicht meine Idee, und ich bin damit auch nicht sonderlich glücklich.

      Diese Zeile war die Lösung:
      String ^FileLoad = gcnew String(argv[1]);

      Comment


      • #4
        Jetzt habe ich aber noch ein weiteres Problem. Ich hätte gerne die hier gewonnen Strings in ein Stringarray geschrieben.

        Hierzu habe ich folgendes Array erstellt:
        array<String ^> ^Parameter;

        allerdings bringe ich die Variablen da nicht rein, es wird immer wieder dieser Fehler angezeigt:
        Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt

        Ich habe versucht das Array wie folgt zu beschreiben:
        Parameter[0] = FileLoad;

        dann habe ich gelesen dass es ja mit verwalteten und nicht verwalteten Variablen zu tun hat. Also habe ich folgendes versucht

        gcroot<String ^ > Group2;
        String ^ str = gcnew String(argv[3]);
        Group2 = str;

        String ^ targetStr = Group2;

        Der String lässt sich zwar wunderbar wandeln, aber immer noch nicht in das Array packen...

        Comment

        Working...
        X