Shellexecute - wie Return-Werte bekommen?
-
Da es ja eigentlich nur ein Übungsprogramm für mich ist, ist das zwar meiner Meinung nach nebensächlich. Aber ich übergebe eine ja eine Zahl k an das zweite Programm(b: Bruttobetrag). Daher sind alle Variablen hier erstmal von Typ double. Deklaration etc. passt.
Das zweite Programm errechnet dann Umsatzsteuer(Variable u) und Nettobetrag (Variable n).Dann berechnet das Programm eben u und n aus b. Momentan will ich nur u zurückgeben lassen. Denke ansonsten braucht man ja eine Liste?
Letztendlich kommt dann:
return b;
}Letztendlich wie gesagt ein kleines Übungsprogramm - aber vl. werd ich ja nochmal ganz gross... Mich interessieren letztendlich Zahlen und Strings als Rückgabewert.
Hoffe, das beantwortet deine Frage und hilft mir auch weiter.Thx
Kai
-
Hallo KVB,
außer dem Error-Code gibt es keine direkte Möglichkeit, einen Wert zu übermitteln.
Normalerweise werden Werte mittels IPC (Interprocess Communication) zwischen verschiedenen Programmen übertragen - dies ist aber bei deinem bisherigen Kenntnisstand noch zu viel des guten -)
Eine andere einfachere Möglichkeit wäre, daß du die Daten in eine Datei schreibst und aus dem anderen Programm wieder ausliest.
-
Wäre ja auch zu schön gewesen, wenn das noch funktioniert hätte...
Naja gut. Dann dank ich trotzdem schön und iwann werd ichs vielleicht hinbringen...
Danke
-
Du brauchst nicht unbedingt pipes für die Kommunikation zwischen zwei Prozessen.
Als Übung könntest du bspw. den anderen Prozess mit CreateProcess erstellen und warten, bis dieser beendet ist. Der andere Prozess schreibt das berechnete Ergebnis in Textform in die Zwischenablage, diese wird dann vom ersten Prozess geöffnet und der Inhalt ausgewertet.
Klar, es klingt alles ein wenig umständlich, soll aber nur zu Übungszwecken sein, oder?
-
Erklär doch bitte, wie dein Programm das Ergebnis veröffentlicht. Die lapidare Formulierung
KVB schrieb:
...
return b
...hilft nicht wirklich weiter. WER liefert dieses b?
Bitte beschreib´ die Funktionsweise des externen Programms, z.B. "es bekommt per Kommandozeile die Werte x, y und z, und gibt in der main Funktion a zurück". Passendes bitte einsetzen/ergänzen.
-
So, das ist also mein erstes Programm.
Problem ich habe statt des Rückgabewertes rueckgabe natuerlich nun ein Rueckgabewert fuer ShellExecute. Das bedeutet, die Variable rueckgabe sollte natürlich eigentlich die Variable sein, die aus Programm 2 zurückgegeben wird.#include <iostream.h> #include <stdlib.h> #include <shlwapi.h> #include <shlobj.h> using namespace std; main() { char k[256]; cout << "Geben Sie eine Zahl ein: "; cin >> k; HINSTANCE rueckgabe = ShellExecute(0,"open","D:\\studium\\Programmierung\\c++\\3 - Shellexecute\\3a - shellexecute2.exe",k,0,SW_SHOW); cout << "\nDas Ergebnis: " << int(rueckgabe) << "\n"; system("Pause"); }
Und das eben mein zweites:
#include <iostream.h> #include <stdio.h> using namespace std; int main( int argc, char* argv[]) { int d; cout << argc << " Variablen wurden uebergeben.\n"; cout << "Die erste Variable war der Dateiname,\ndie zweite Variable lautet: " << argv[1] << "\n"; cout << "\nTippen Sie eine Zahl ein: " cin >> d; return d; system("PAUSE"); }
Es ist wirklich nichts besonderes. Und ich versuche mir nur damit - wenn vl. auch umständlich, C++ anzueignen. Es ist wirklich nur zur Übung gedacht, auch wenns im Ordner Studium liegt.
Danke
MfG
Kai
-
Hi,
C++ ist nicht so geeignet dafuer, sie einfach nur ueber das Forum zu lernen. Dieses Forum hier ist in Ordnung, wenn Du weisst, wer was drauf hat und Dir die richtigen Codes aneignest, aber es steht einfach zu viel Quatsch ueberall.
Daher solltest Du Dir ein geeignetes Buch zulegen und es lieber so lernen.
Allein deine main-Funktion schreibt man so nicht und iostream.h benutzt man nicht, da veraltet. HINSTANCE ist eine Art Handle, du erhaelst da nicht den Errorcode und die Ausgabe ergibt dann wohl kaum Sinn. Das ist aber schon WinAPI-spezifisch und gehoert z.B. auch nicht mehr zum C++-Standard, das solltest Du z.B. auch trennen.
Auch char-Arrays nutzt man in C++ nur aus Kompatibilitaetsgruenden oder fuer Konstanten etc.
Du siehst, da gibt es sehr viel, was man beim Zusammensuchen falsch machen kann. Wenn Du gewisse Grundlagen hast, liefert Dir das Forum aber sehr nuetzliche Zusatzinfos und gute Diskussionen.
-
KVB schrieb:
So, das ist also mein erstes Programm.
[...]
Es ist wirklich nichts besonderes. Und ich versuche mir nur damit - wenn vl. auch umständlich, C++ anzueignen. Es ist wirklich nur zur Übung gedacht, auch wenns im Ordner Studium liegt.
Ich habe (von Anfang an) das Gefühl, daß das gar nicht das ist, was Du wirklich willst.
Vielleicht möchtest Du erst mal nur EIN Programm schreiben, daß eine main-Funktion hat, aus der dann nach Eingabe von Werten eine im selben Programm befindliche Rechenfunktion aufgerufen und das Ergebnis zurückgegeben wird?Zumindest wäre eine solche Herangehensweise imho die richtige für einen C/C++ - Neuling.
-
Belli schrieb:
Vielleicht möchtest Du erst mal nur EIN Programm schreiben, daß eine main-Funktion hat, aus der dann nach Eingabe von Werten eine im selben Programm befindliche Rechenfunktion aufgerufen und das Ergebnis zurückgegeben wird?
Zumindest wäre eine solche Herangehensweise imho die richtige für einen C/C++ - Neuling.
Also das, dachte ich bis jetzt eigentlich, bringe ich hin. Nur, dass nun alles veraltet ist.
Ich hab ein Buch, allerdings ist das von anno 1995 oder so. Deswegen: es funkioniert zwar alles, aber es ist sicher nicht das modernste. Ich werd mir wohl die Zeit für ein Tutorial nehmen.
Danke
Kai
-
Kein Tutorial (Stichwort Augenkrebs http://www.stupidedia.org/stupi/Augenkrebs).
Lieber ein modernes, gutes Buch. Für Empfehlungen benutze die Forensuche.
-
Naja, Du schriebst ja, Du bist neu bei C++ und willst es Dir erst mal aneignen. Und da ist IPC vielleicht nicht das beste Einstiegsthema, vor allen Dingen, da es weniger mit C/C++ zu tun hat, als mit plattformabhängigen API's.
-
Belli schrieb:
Naja, Du schriebst ja, Du bist neu bei C++ und willst es Dir erst mal aneignen. Und da ist IPC vielleicht nicht das beste Einstiegsthema, vor allen Dingen, da es weniger mit C/C++ zu tun hat, als mit plattformabhängigen API's.
Seh ich ja auch ein, wenn es so schwierig ist. Weiß man ja vorher nicht.
-
Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Erstens könntest du, wie schon vorgeschlagen, den Weg über die Zwischenablage gehen, zweitens kannst du dir, da dir ja der Name des anderen Prozesses bekannt ist, einen Handle auf diesen Prozess besorgen und anschließend GetExitCodeProcess
aufrufen (http://msdn.microsoft.com/en-us/library/ms683189(VS.85).aspx).
-
VF schrieb:
Erstens könntest du, wie schon vorgeschlagen, den Weg über die Zwischenablage gehen, zweitens kannst du dir, da dir ja der Name des anderen Prozesses bekannt ist, einen Handle auf diesen Prozess besorgen und anschließend GetExitCodeProcess
aufrufen (http://msdn.microsoft.com/en-us/library/ms683189(VS.85).aspx).Dazu benötige man keine Tricks und keinen Prozessnamen (der ja auch nicht eindeutig sein muss).
Man nimmt einfach ShellExecuteEx und bekommt ein Prozess Handle. Dann nimmt man das von Dir erwähnte GetExitCodeProcess.