Variablenübergabe von VB an C++ mit Shell Befehl



  • Warum übergibst Du denn einen String? Das muss ja schiefgehen...



  • C++ (um mit den Werten zu "rechnen", solltest du sie irgendwo in eine Zahl zurückwandeln)



  • ach so ok ...
    kann ich machen...

    ich hab mir ne funktion dafür geschrieben:

    float stringtofloat (string doublestring)
    {
    char umwandler[40];
    float neuerfloat;
    //kopieren des Strings in ein Char-Feld
    strcpy(umwandler,doublestring.c_str());
    //Umwandeln eines Char Feldes in ein Double
    neuerfloat=atof (umwandler);
    return neuerfloat;
    }



  • Edit: *hust* sollte mal die posts bis zu ende lesen bevor ich was schreib *hust*



  • Ich rate Dir trotzdem dringend davon ab einen String zu übergeben, da dies vielleicht auf englischen OSen funktioniert, bei anderen aber nicht mehr...



  • Erstens kannst du man: atof auch direkt auf doublestring.c_str() rechnen lassen 😉 Und zweitens ist es eine gute Idee, kritische Funktionen mit Kontrollausgaben zu versehen (TRACE oder clog) - dann kannst du mitverfolgen, was da drin passiert.



  • mmm ... ja problem ist halt, dass ich mich ned wirklich gut damit auskenne...
    bin maschinenbauer, kein informatiker...
    hatte 2 semester c ... nedmal c++

    nun versuch ich irgendwie da durchzukommen... und es funzt alles, nur diese übergabe ned...
    😞

    mein dozent meinte, zur not sollte ich die werte in eine datei schreiben und mit c++ von da wieder auslesen, aber das kanns doch ned sein ...
    nur weiß ich nun erstmal ned weiter



  • zu jochen:

    ich würds ja gar ned als string übergeben...
    ich brauche nur floats...

    aber mein dozent meinte... es müsste so als string übergeben werden... ^^
    ich hab leider keine ahnung ob das auch anders geht... also direkt als float...
    dann kann ich mir nämlich den ganzen transformationskram ersparen...
    nur obs dann mit shell funktioniert ist die frage...



  • Aber du weißt hoffentlich, wie man in C etwas ausgibt, oder? Dann ist der erste Schritt für Hilfsausgaben schon gemacht 😉

    Dazu setzt du verteilt in deine Funktion Aufrufe von TRACE(...) mit wichtigen Informationen zum Funktionsablauf (das bekommt die selben Parameter wie printf() und schreibt in die Debug-Ausgabe des Visual Studio) oder Ausgaben an clog (wird analog zu cout verwendet und schreibt ins Konsolenfenster) oder einen globalen ofsteam (den du im oder dem main auf ein Ausgabefile klemmen mußt).
    In deinem Beispiel würde sich ein "TRACE("Param: %s = %f\n",doublestring.c_str(),neuerfloat);" vor dem return anbieten.



  • k... dann werd ich das mal antesten... danke



  • mmm ich weiß nicht was ich vorher übersehen habe..

    aber ich glaube es liegt wirklich daran, dass vb werte mit "," übergibt.. und c nur mit "." arbeiten kann...

    jetzt ist nur noch die frage, wie ich in vb aus dem "," ein "." mache...



  • #include<algorithm>
    
    std::string text=...;
    std::replace(text.begin(),text.end(),',','.');
    

    Das dürfte die kürzeste Version sein.



  • ich glaub es gibt auch eine entsprechende Funktion die das für dich macht aber hab atm ka welche

    notfalls (wenn du es jetzt dann doch als String hast) suche einfach nach dem , und ersetze es durch . ^^

    Edit: mh zu langsam



  • CStoll (off) schrieb:

    ',','.'

    Es gibt auch Länder die Verwenden weder , noch . als Dezimaltrennzeichen... (ganz abgesehen davon, dass Währungen i.d.R. sowohl Dezimaltrennzeichen als auch 1000er Trennzeichen haben)

    Fazit: Wenn irgend möglich sollte vermieden werden Strings als Zahlen zu übergeben. Wenn es doch notwendig ist, so muss sowohl das 1000er als auch das Dezimaltrennzeichen bei beiden (also dem Schreiber und dem Leser) gleich sein (also nix mit replace)



  • dann bastel ich mal .. dank euch allen


Anmelden zum Antworten