[Help] Rückgabewert externes Programm
-
Hallo Gemeinde,
1. die SuFu hat nicht wirklich was gebracht, deswegen hier meine Frage:
2. Ich habe ein C++ Programm (MFC -- spielt in dem Fall aber keine Rolle), welches auf eine externe .exe zugreifen muss und dessen Rückgabewert auswerten soll. An den Inhalt der Exe komm ich nicht ran, da es von Linux per Cygwin portiert wurde (nur für Infos).
Ein kleines Bsp:
Aufruf in meiner Methode:
.. .. system("zebra/zebraimg.exe bsp.bmp"); .. ..
Das Problem ist, dass die Exe kurz aufprompt, jedoch wie gelange ich an den Rückgabe-Wert.
Ein einzelner Aufruf der zebraimg.exe bsp.bmp
liefert bsp. EAN-13:5205983838Daran muss ich kommen, meinetwegen als String, den kann ich ja leicht auseinanderpflücken.
Danke Euch!
Schönes WE
-
Was du dort siehst, ist NICHT der Rückgabewert des Programms*, sondern dessen Ausgabe. Und die könntest du auslesen, indem du sie umleitest in dein Programm - dazu kannst du das Porgramm per CreateProcess() öffnen und einige Datei-Handles angeben, die es als Standard-Ein/Ausgabe nutzt.
* der Rückgabewert des Programms ist der Wert, den du bei exit() bzw. beim return der main()-Funktion angibst - und den erhälst du als Rückgabe von system() geliefert.
-
1. system returniert das was die EXE returniert.
2. Ansonsten kanst Du auch CreateProcess/ShellExecuteEx verwenden (IMHO besser als system), und GetExitCodeProcess (http://msdn2.microsoft.com/en-us/library/ms683189.aspx) nutzen.
3. Oder geht es um das was die EXE auf stdout ausgibt. Dann ist das hier was Du brauchst:
http://msdn2.microsoft.com/en-us/library/ms682499.aspx
-
danke Euch,
werde mich da mal einlesen
schönes WE
-
Hi - ja, so schnell kann´s gehen
Habe n bissel was probiert:
CString strPath = strPath + "\\zebra\\zebraimg.exe bsp.bmp"; // bsp.bmp ist der //Übergabe-Parameter DWORD dwErrId = 0; PVOID lpErrMsg = NULL; SHELLEXECUTEINFO si = {0}; si.cbSize = sizeof(SHELLEXECUTEINFO); si.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI; // handle auf Prozess si.hwnd = HWND_DESKTOP; si.lpVerb = "open"; si.lpFile = strPath; si.nShow = SW_SHOW; if (ShellExecuteEx(&si)) { MessageBox("okay","okay",MB_OK); if (si.hProcess) { // .... mit dem handle arbeiten CloseHandle(si.hProcess); } } else { // Fehlerfall dwErrId = GetLastError(); if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, dwErrId, 0, (LPTSTR)&lpErrMsg, 0, NULL)) { MessageBox((const char *)lpErrMsg,"error",MB_OK); // <- da springt er rein mit Parameter LocalFree(lpErrMsg); } }
Anscheinend liegt es an dem Übergabe-Parameter, denn wenn ich keine bsp.bmp übergebe, dann funzt es, ansonsten wird mir gesagt, dass das System die Datei nicht finden kann.
Wie kann man dem Struct SHELLEXECUTEINFO si.lpFile = strPath; "beibringen", dass der Parameter zur Datei gehört?
Danke allen
-
si.lpParameters = "bsp.bmp"
-
okay funzt - fettes danke