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 aufargc
testen, bevor aufargv
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!