System::String^ zu std::string



  • Guten Abend,

    um in Visual Studio 2015 in einer Blank App eine TextBox auslesen zu können, versuche ich deren Inhalt in eine Int-Variable zu konvertieren, scheitere aber daran. Nun würde ich den zweiten Schritt, von std::string zu int zu konvertieren, schaffen, aber wie bekomme ich die String^-Variable der TextBox in eine std::string-Variable?
    Alle Lösungsmöglichkeiten die ich in stundenlangem Ausprobieren getestet habe wie Marshal bekomme ich nicht zum Laufen, gibt es irgendwo eine Anleitung dazu oder könnt ihr mit weiterhelfen? Oder gibt es ansonsten noch eine Möglichkeit TextBox->Text direkt in eine Int oder double Variable zu übernehmen?

    Würde mich über Hilfe freuen da ich partout nicht weiterkomme.



  • In den FAQ gibt dazu Antworten:
    https://www.c-plusplus.net/forum/158664
    https://www.c-plusplus.net/forum/158666

    Und vielleicht gibt es heutzutage sogar noch einfachere Lösungen.



  • Danke erstmal für den Hinweis!

    Ich habe in den FAQs nun geschaut wie ich die Hilfsklasse einbauen kann, kann dazu aber leider nichts finden.

    Muss ich das erste Fenster aus den FAQs im ersten Link als .h Datei abspeichern, sodass ich den Befehl StringConvA in MainPage.xaml.cpp verwenden kann, und wenn ja unter welchem Namen?

    Wahrscheinlich ist das alles ziemlich trivial, wir wurden allerdings von der Uni nur sehr unzureichend darauf vorbereitet und sollen das Projekt demnächst abgeben...

    Danke für die Hilfe!



  • Sebastian96 schrieb:

    Oder gibt es ansonsten noch eine Möglichkeit TextBox->Text direkt in eine Int oder double Variable zu übernehmen?

    Klar.

    Verwende System::Int32::Parse bzw. System::Int32::TryParse .
    Und für Double analog System::Double::Parse bzw. System::Double::TryParse .

    Da bekommst du dann nen System::Int32 bzw. eben System::Double zurück, was bloss andere Bezeichnungen für die eingebauten C++/CLI Typen int bzw. double sind.



  • Musss ich dazu

    using namespace System::Int32::Parse
    

    verwenden und kann dann daraus

    int i = Parse (Textbox1->Text);
    

    machen?
    Wenn ich das versuche bekomme ich leider die nächsten Fehlermeldungen, "'System' is not a Namespace Name" und "'Parse': identifier not found"...Oder habe ich das komplett falsch verstanden?



  • Nein. Entweder ohne using namespace so:

    int i = System::Int32::Parse(Textbox1->Text);
    

    oder mit:

    using namespace System;
    
    // dann... 
    int i = Int32::Parse(Textbox1->Text);
    


  • Ich bekomme sobald ich

    using Namespace System;
    

    verwende den Fehler "name must be a Namespace name" oder wenn ich die erste Möglichkeit verwende "name followed by "::" must be a class or a Namespace name"-woran kann das liegen?

    Nochmal vielen Dank für die Hilfe!



  • namespace muss klein geschrieben sein.



  • Tut mir Leid, ich habe "namespace" in Visual Studio natürlich klein geschrieben und nur hier durch die Autokorrektur den Fehler gemacht, und trotzdem den Fehler in Visual Studio bekommen. Was mache ich da falsch?



  • Da musst du schon ein wenig mehr Code zeigen. Ich gehe davon aus, dass in der Ausgabe vom Compiler die entsprechende Zeile angegeben wird, wo der Fehler liegt.



  • Gerne!

    //
    // MainPage.xaml.cpp
    // Implementation of the MainPage class.
    //
    
    #include "pch.h"
    #include "MainPage.xaml.h"
    
    using namespace Taschenrechner;
    using namespace std;
    using namespace Platform;
    using namespace Windows::Foundation;
    using namespace Windows::Foundation::Collections;
    using namespace Windows::UI::Xaml;
    using namespace Windows::UI::Xaml::Controls;
    using namespace Windows::UI::Xaml::Controls::Primitives;
    using namespace Windows::UI::Xaml::Data;
    using namespace Windows::UI::Xaml::Input;
    using namespace Windows::UI::Xaml::Media;
    using namespace Windows::UI::Xaml::Navigation;
    using namespace System;
    
    // The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
    
    MainPage::MainPage()
    {
    	InitializeComponent();
    
    }
    
    int a = 1;
    int b = 1;
    
    void Taschenrechner::MainPage::ClickGleich(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
    {
    	int b = Int32::Parse(Eingabezeile->Text);
    }
    

    Ich bekomme leider keinen genauen Fehler Code, aber einen Verweis auf die Zeile mit

    using namespace System;
    


  • Mal so ins blaue geraten: Du hast keinen C++/CLI Code, sondern C++/CX - das ist, so würde ich das umschreiben, ein C++-ähnliches Sprachkonstrukt für den vereinfachten Umgang mit COM; Heraus kommt dann aber schlussendlich nativer Code, nicht managed Code (=.NET).

    Ich gehe davon aus, dass du irgendein WRT/Windows Store App Projekt erzeugt hast.. oder?



  • Ich habe mit Visual Studio 2015 eine leere Visual C++ Projektdatei erzeugt, und dort dann wie in den Anleitungen der Visual Studio Seiten in MainPage.xaml.cpp den eigentlichen Code geschrieben nachdem ich in MainPage.xaml die eigentliche Benutzeroberfläche erstellt hab, mehr weiß ich leider nicht...



  • Ja. Schlecht. Ich weiss, es ist verlockend, mit VS und dem Windows Store App bzw. WRT Zeugs ein UI zu machen, aber ich rate dir dringend davon ab. Gerade als Anfänger ist C++/CX mit dem WRT Zeugs nicht geeignet - auch später nicht, aber dann erkennst du es vielleicht selbst.

    Falls UI wichtig ist, nimm C# mit WPF - oder dann halt C++ mit einem geeigneten Toolkit wie Gtk, wxWidgets etc. VS kannst du bei beiden Varianten sowohl als Compiler als auch als Code-Editor verwenden.



  • Ok dann werde ich es mal mit C# probieren, mal schauen...Danke auf jeden Fall!


Log in to reply