Variable in system() nutzen
lima-city → Forum → Programmiersprachen → C/C++ und D
all
aufruf
bauen
code
dank
eventuell funktionieren
fehler
fehlermeldung
file
filter
idee
konvertieren
speichern
string
support
system
url
vergessen
windows
zeile
-
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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 -
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
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 Variablesfd->FileName
schreibe, dann kommt ein Fehler [Error: no suitable variable....]
2. Ja hab ich vergessen
Beitrag zuletzt geändert: 20.5.2015 17:21:16 von vosliker -
Wie es aussieht willst du einen
nachSystem::String
konvertieren. Laut Microsoft gibt es dazu folgende Möglichkeiten: *klick*. Laut folgendem Codeschnipselchar*
//#include <atlstr.h> System::String * str = S"Hello world\n"; CString str3(str); printf(str3);
müsstest du ca sowas bauen könnenSystem::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. -
hackyourlife schrieb:
Wie es aussieht willst du einen
nachSystem::String
konvertieren. Laut Microsoft gibt es dazu folgende Möglichkeiten: *klick*. Laut folgendem Codeschnipselchar*
//#include <atlstr.h> System::String * str = S"Hello world\n"; CString str3(str); printf(str3);
müsstest du ca sowas bauen könnenSystem::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 -
vosliker schrieb:
So geht es NICHT! Vertausche die letzten beiden Code-Zeilen, dann geht es. Also erst den Speicher freigeben, nachdem du
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);
aufgerufen hast!system()
-
hackyourlife schrieb:
vosliker schrieb:
So geht es NICHT! Vertausche die letzten beiden Code-Zeilen, dann geht es. Also erst den Speicher freigeben, nachdem du
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);
aufgerufen hast!system()
Ja danke, hatte vergessen es umgekehrt zu posten. Hab es aber selber richtig gemacht -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage