kostenloser Webspace werbefrei: lima-city


Variable in system() nutzen

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    vosliker

    vosliker hat kostenlosen Webspace.

    Hallo,
    ich versuche gerade irgendwie eine Variable in den system() Befehl einzubringen: (Sprache: C++)
    private: System::Void button4_Click(System::Object^  sender, System::EventArgs^  e) {
    	SaveFileDialog^ sfd = gcnew SaveFileDialog();
    	if (sfd->ShowDialog() != System::Windows::Forms::DialogResult::OK)
    	{
    		return;
    	}
    	system(("adb backup -all -apk -shared -f " +sfd->FileName+ "backup.ab").c_str());
    }

    visual studio 2013 save file dialog...
    jedenfalls kommt immer ein fehler, wenn ich es so eingebe:
    Error: expression must have a class type

    Kann mir da jemand weiterhelfen?

    Danke im Vorraus :prost:
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Und für welche Zeile wird dieser Fehler ausgegeben? Die mit dem system-Aufruf, oder eine andere?

    Funktioniert es denn, wenn du für den String eine temporäre Variable nutzt?

    Es wär übrigens gut gewesen, wenn du dazu gesagt hättest, dass es sich nicht um C++, sondern C++/CLI handelt ;-)

    Beitrag zuletzt geändert: 20.5.2015 9:52:04 von hackyourlife
  4. Autor dieses Themas

    vosliker

    vosliker hat kostenlosen Webspace.

    hackyourlife schrieb:
    Und für welche Zeile wird dieser Fehler ausgegeben? Die mit dem system-Aufruf, oder eine andere?

    Funktioniert es denn, wenn du für den String eine temporäre Variable nutzt?


    Die mit system() um genauer zu sein wird sogar die zweite Klammer mit der Fehlermeldung markiert.
    Und für welche Zeile wird dieser Fehler ausgegeben? Die mit dem system-Aufruf, oder eine andere?


    EDIT:
    Ups... Hab nur die erste Zeile gelesen :scared:

    Funktioniert es denn, wenn du für den String eine temporäre Variable nutzt?

    Es wär übrigens gut gewesen, wenn du dazu gesagt hättest, dass es sich nicht um C++, sondern C++/CLI handelt ;-)


    1. Temporäre Varible. Wenn du damit normale Variablen meinst: Kein Fehler, aber wenn ich in die Variable
    sfd->FileName

    schreibe, dann kommt ein Fehler [Error: no suitable variable....]

    2. Ja hab ich vergessen :cookie:

    Beitrag zuletzt geändert: 20.5.2015 17:21:16 von vosliker
  5. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Wie es aussieht willst du einen
    System::String
    nach
    char*
    konvertieren. Laut Microsoft gibt es dazu folgende Möglichkeiten: *klick*. Laut folgendem Codeschnipsel
    //#include <atlstr.h>
    System::String * str = S"Hello world\n";
    CString str3(str);
    printf(str3);
    müsstest du ca sowas bauen können
    System::String^ s = sfd->FileName + "bla";
    CString cmd(s);
    system(cmd);
    Natürlich ist das ungetestet, und ich hab grundsätzlich auch keine Ahnung von C++/CLI … das ist lediglich eine Idee, wie es eventuell funktionieren könnte.
  6. Autor dieses Themas

    vosliker

    vosliker hat kostenlosen Webspace.

    hackyourlife schrieb:
    Wie es aussieht willst du einen
    System::String
    nach
    char*
    konvertieren. Laut Microsoft gibt es dazu folgende Möglichkeiten: *klick*. Laut folgendem Codeschnipsel
    //#include <atlstr.h>
    System::String * str = S"Hello world\n";
    CString str3(str);
    printf(str3);
    müsstest du ca sowas bauen können
    System::String^ s = sfd->FileName + "bla";
    CString cmd(s);
    system(cmd);
    Natürlich ist das ungetestet, und ich hab grundsätzlich auch keine Ahnung von C++/CLI … das ist lediglich eine Idee, wie es eventuell funktionieren könnte.

    Danke das du versuchst mir zu helfen! Aber so geht das leider nicht :-(
    Jetzt kommt die Fehlermeldung zu cmd ( das in system() )
    ALT::CString cmd

    Error: no suitable conversation function from "ALT::CString" to "const char*" exists


    Weißt du, was da der Fehler sein könnte?


    EDIT:
    Geht jetzt:
    SaveFileDialog^ sfd = gcnew SaveFileDialog();
    	sfd->Filter = "Backup Files|*.ab|All Files|*.*";
    	if (sfd->ShowDialog() != System::Windows::Forms::DialogResult::OK)
    	{
    		return;
    	}
    
    
    	using namespace System::Runtime::InteropServices;
    
    	System::String^ s = "adb backup -all -apk -shared -f " + sfd->FileName;
    	char* cmd = (char*)Marshal::StringToHGlobalAnsi(s).ToPointer();
    	Marshal::FreeHGlobal((IntPtr)cmd);
    
    
    	system(cmd);


    Beitrag zuletzt geändert: 20.5.2015 19:12:55 von vosliker
  7. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    vosliker schrieb:
    Geht jetzt:
    SaveFileDialog^ sfd = gcnew SaveFileDialog();
    	sfd->Filter = "Backup Files|*.ab|All Files|*.*";
    	if (sfd->ShowDialog() != System::Windows::Forms::DialogResult::OK)
    	{
    		return;
    	}
    
    
    	using namespace System::Runtime::InteropServices;
    
    	System::String^ s = "adb backup -all -apk -shared -f " + sfd->FileName;
    	char* cmd = (char*)Marshal::StringToHGlobalAnsi(s).ToPointer();
    	Marshal::FreeHGlobal((IntPtr)cmd);
    
    
    	system(cmd);
    So geht es NICHT! Vertausche die letzten beiden Code-Zeilen, dann geht es. Also erst den Speicher freigeben, nachdem du
    system()
    aufgerufen hast!
  8. Autor dieses Themas

    vosliker

    vosliker hat kostenlosen Webspace.

    hackyourlife schrieb:
    vosliker schrieb:
    Geht jetzt:
    SaveFileDialog^ sfd = gcnew SaveFileDialog();
    	sfd->Filter = "Backup Files|*.ab|All Files|*.*";
    	if (sfd->ShowDialog() != System::Windows::Forms::DialogResult::OK)
    	{
    		return;
    	}
    
    
    	using namespace System::Runtime::InteropServices;
    
    	System::String^ s = "adb backup -all -apk -shared -f " + sfd->FileName;
    	char* cmd = (char*)Marshal::StringToHGlobalAnsi(s).ToPointer();
    	Marshal::FreeHGlobal((IntPtr)cmd);
    
    
    	system(cmd);
    So geht es NICHT! Vertausche die letzten beiden Code-Zeilen, dann geht es. Also erst den Speicher freigeben, nachdem du
    system()
    aufgerufen hast!


    Ja danke, hatte vergessen es umgekehrt zu posten. Hab es aber selber richtig gemacht :wink:
  9. 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!