Kommandozeilen-App funzt nicht wenn über GUI aufgerufen wird



  • Hallo Zusammen,
    ich habe eine Kommandozeilen-App geschrieben (C++), die von Visual Studio heraus gestartet wunderbar funktioniert (z.B. im Debug- oder Release Modus). Dabei habe ich die Übergabeparameter natürlich hart gekodet in das Programm geschrieben.

    Das Ziel meines Projektes ist allerdings, dass die Kommandozeilen-App von einer GUI gestartet wird (GUI in C# geschrieben) und auch von der GUI die Parameter erhält. Anschließend soll das Ergebnis von der GUI gelesen werden (Rückgabewert = 0 wenn erfolgreich, sonst 1).

    Doch als Rückgabewert bekomme ich (gestartet über die GUI) immer -1073740791. Die Google-Suche brachte mich auch nicht weiter.

    Ich glaube, dass ich die exe falsch aufrufe und/oder bei der Übergabe der Parameter etwas schief läuft. Denn das Programm läuft ja offensichtlich wenn ich es über VS starte. Die Exe wird von der Gui wie folgt aufgerufen:

    private int CMDAutomate(string strApp, string Kommando){
            int result = 0;
    
            if (!File.Exists(strApp)){
                return result = 3;
            }
            Process proc = new Process();
    
            proc.StartInfo.FileName = strApp;
            proc.StartInfo.Arguments = Kommando;
            proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
    
            proc.Start();
    
            proc.WaitForExit();
    
            result = proc.ExitCode;
    
            proc.Close();
            
    return result;
    }
    

    wobei die übergebenen Parameter wie folgt aussehen:

    strApp = Pfad zur exe-Datei
    Kommando = die Parameter in der Form "Parameter1" "Parameter2" "..."

    die Kommandozeilenapplikation sieht wie folgt aus:

    int main(int argc, const char** argv) {
    
    	JtkEntityFactory::init();
    	JtkEnvironment::setOption(JtkEnvironment::JtkLAYER_MANAGER_ENABLE, 1);
    	JtkEntityFactory::registerCustomer(xyz);
    
    	//argv[1] = "A:\\WORK_ROOT\\DATEN\\ab_12345678_90.cojt\\ab_12345678_90.jt";
    	//argv[2] = "4.6";
    	//argv[3] = "-262.5689";
    	//argv[4] = "-812.7128";
    	//argv[5] = "785.71";
    	//argv[6] = "0";
    	//argv[7] = "0";
    	//argv[8] = "0";
    	//argv[9] = "0";
    	//argv[10] = "0";
    	//argv[11] = "0";
    
                    string pfad = argv[1]
           	float diameter = std::stof(argv[2]);
           	float pointCoordsX = std::stof(argv[3]);
           	float pointCoordsY = std::stof(argv[4]);
           	float pointCoordsZ = std::stof(argv[5]);
           	float translationX = std::stof(argv[6]);
           	float translationY = std::stof(argv[7]);
           	float translationZ = std::stof(argv[8]);
           	float rotationX = std::stof(argv[9]);
           	float rotationY = std::stof(argv[10]);
           	float rotationZ = std::stof(argv[11]);
    

    weiss jemand wo das Problem liegt?



  • @Antelito sagte in Kommandozeilen-App funzt nicht wenn über GUI aufgerufen wird:

    die Kommandozeilenapplikation sieht wie folgt aus:

    Nein. Das lässt sich nicht übersetzen.

    @Antelito sagte in Kommandozeilen-App funzt nicht wenn über GUI aufgerufen wird:

    Ich glaube, dass ich die exe falsch aufrufe

    Du hast also eine Frage zu C#, nicht zu C++/CLI.

    @Antelito sagte in Kommandozeilen-App funzt nicht wenn über GUI aufgerufen wird:

    immer -1073740791

    Wie stellst du das fest?



  • @Antelito sagte in Kommandozeilen-App funzt nicht wenn über GUI aufgerufen wird:

    Dabei habe ich die Übergabeparameter natürlich hart gekodet in das Programm geschrieben.

    Du kannst die Kommandozeilenparameter auch in den VS-Projektoptionen ("Debugging") angeben.

    Der Rückgabewert scheint ein STATUS_STACK_BUFFER_OVERRUN zu sein.
    Kann es sein, daß du nicht genügend Parameter übergibst (du solltest immer in deinem C++ Programm auf argc testen, bevor auf argv zugegriffen wird)?



  • @Th69 danke für den Tipp, probiere ich mal aus und berichte dann



  • @manni66 das ist der Wert, den proc.ExitCode zurückgibt



  • @Antelito sagte in Kommandozeilen-App funzt nicht wenn über GUI aufgerufen wird:

    Kommando = die Parameter in der Form "Parameter1" "Parameter2" "..."

    Ist das nicht eher Kommando = "Parameter1 Parameter2 ..."



  • @DirkB richtig. Daran hats gelegen... Danke!


Log in to reply