Ausführbare exe mit /clr
-
Hallo liebes Forum,
nach ewiger eigener Recherche mithilfe von Google lande ich nun hier und schreibe einen eigenen Beitrag:
Ich habe eine Windows-Oberfläche mithilfe von VS++ programmiert, die 2 Dateipfade an eine externe .exe weitergeben soll. Dies dient zum Konvertieren von Dateiformaten:
char systemcall[512]; sprintf_s(systemcall, "Sub\\converter.exe %s %s", input_path_user, output_path_user); system(systemcall);
Dies funktioniert auch einwandfrei ! Ich möchte nun aber die Windowsoberfläche auch auf einem anderen PC nutzen können. (converter.exe ist bereits eine eigenständige Datei zum ausführen).
Die 2 Dateipfade übergebe ich in einem String, welchen ich aus dem String^ konvertiert habe. Dabei benutze ich "/clr (Marshal)". Wenn ich nun eine ausführbare .exe von der Windowsoberfläche haben möchte und mit MDd (also ohne dll) debugge, kommt natürlich der Fehler, dass dies nicht geht wegen dem /clr.
Ich poste nun meinen Quellquode des Input-Paths und hoffe dass mir jemand helfen kann, wie ich a) ohne Marshall einen String erzeugen kann oder b) eine eigenständige .exe mit clr erzeuge:
String^ filename = System::IO::Path::GetFileName(openFileDialog1->FileName); String^ input_file = System::IO::Path::GetDirectoryName(openFileDialog1->FileName); //MessageBox::Show(input_file=input_file+"\\"+filename, "Directory"); using namespace msclr::interop; string std_filename = marshal_as<std::string>(filename); string std_input_file = marshal_as<std::string>(input_file); const char *str_filename = std_filename.c_str(); const char *str_input_file = std_input_file.c_str(); //globales Array input_path_user input_path_user[0]=0; strcpy_s(input_path_user, str_input_file); strcat_s(input_path_user, "\\"); strcat_s(input_path_user, str_filename);
Vielen Dank !!
lg, Socra
-
String^ kann man nicht einfach als Zeiger in einem normalen C/C++ Code verwenden.
Siehe MSDN
http://msdn.microsoft.com/en-us/library/d1ae6tz5.aspxAber warum mischt Du hier C++/CLI mit normalem C/C++?
-
String^ kann man nicht einfach als Zeiger in einem normalen C/C++ Code verwenden.
Tue ich ja auch nicht. Der String^ ist so vorgegeben bei openFileDialog. Ich wollte das nur in einen std::String konvertieren, um den Pfad an die zweite exe zu übergeben.
Aber warum mischt Du hier C++/CLI mit normalem C/C++?
Weil ich es wahrscheinlich nicht besser weiß
Kannst du mir denn eine Methode sagen, wie ich den ausgewählten Pfad im openFileDialog, der ja in String^ gespeichert wird, als Pfad-Parameter übergeben kann?
Vielen Dank !
-
Wenn Du es nicht besser weißt lerne erst einmal normales C++ und vor allem den Unterrschied u C++/CLI.
Ich habe Dir einen Link für die entsprechende Umwandlung gegeben.
Verwende ansonsten Verwende CFileDialog, oder OPENFILENAME