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


  • Mod

    String^ kann man nicht einfach als Zeiger in einem normalen C/C++ Code verwenden.

    Siehe MSDN
    http://msdn.microsoft.com/en-us/library/d1ae6tz5.aspx

    Aber 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 !


  • Mod

    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


Anmelden zum Antworten