Forum: PC-Programmierung Daten von Formanwendung an Konsolenanweisung schicken PROCESS


von Lars (Gast)


Lesenswert?

ist das möglich?

von Lars (Gast)


Lesenswert?

Ich möchte eine Variable übergeben Formsanwendung an Konsolenanwenung

von Peter II (Gast)


Lesenswert?

Lars schrieb:
> ist das möglich?

warum nicht, jedes Consolen programm hat doch einen input, output und 
error stream. Dort kann man daten reinscheiben bzw. auslesen.

von Lars (Gast)


Lesenswert?

ich möchte die Varibale int i = 122 von der Formsanwendung an die 
Konsolenanwendung übergeben.


Input(i);


So geht es aber nicht glaube ich!

von Peter II (Gast)


Lesenswert?

Lars schrieb:
> ich möchte die Varibale int i = 122 von der Formsanwendung an die
> Konsolenanwendung übergeben.

so wird dann bestimmt nichts. Das Konsolenprogramm muss schon die 
Varible per input einlesen oder als Parameter übergeben bekommen.

Aber mit den wenigen Infos kann hier niemand weiter helfen.

von Lars (Gast)


Lesenswert?

1
private void button1_Click(object sender, EventArgs e)
2
        {
3
            Process JpegToSWF = new Process();

hier ist die EXe die ich ausführen will.

Nun sollte da noch die in der Formsanwendung global definierte Variable 
Variable i an die Konsolenanwendung jpegtoswf übergeben werden.

von Peter II (Gast)


Lesenswert?

Lars schrieb:
> Nun sollte da noch die in der Formsanwendung global definierte Variable
> Variable i an die Konsolenanwendung jpegtoswf übergeben werden.

man kann keine Variabel übergeben, nur daten.

programm.exe i=5

dann musst du es nur noch in deinen konsolenprogram über ARG einlesen.

von Lars (Gast)


Lesenswert?

int argument = args[i];

so dann oder

von Peter II (Gast)


Lesenswert?

Lars schrieb:
> int argument = args[i];
>
> so dann oder

so bestimmt nicht. Argumente sind erstmal Strings.

von Lars (Gast)


Lesenswert?

OK dann so
string argument = args[i];


Und als Output des Konsolenprogramms die Varibale i nach dem Process?
1
private void button1_Click(object sender, EventArgs e)
2
        {
3
            Process JpegToSWF = new Process();
4
5
jpegtoswf.exe i

von Lars (Gast)


Lesenswert?

1
 string strArguments = string.Format("{0} {1} {2} {3}", i, picturename,i);


Hier bekomme ich den Fehler das Null erhalten sein soll!

Kann mir jemand sagen was in der Zeile nicht stimmt?

von Peter II (Gast)


Lesenswert?

Lars schrieb:
> Kann mir jemand sagen was in der Zeile nicht stimmt?

zähle doch einfach die die {} und die anzahl der Parameter.

von Reinhard Kern (Gast)


Lesenswert?

Peter II schrieb:
> warum nicht, jedes Consolen programm hat doch einen input, output und
> error stream. Dort kann man daten reinscheiben bzw. auslesen.

Das geht immer, aber ein Konsolenprogramm unter Windows kann doch auch 
die Win32-API nutzen und damit alles was es so an 
Interprozess-Kommunikation gibt, Pipes, memory mapped files und und 
und....

Unter Linux sicher auch.

Gruss Reinhard

von Malte S. (maltest)


Lesenswert?

@Lars:

Es gibt zillionen Möglichkeiten, das zu tun. Alles in allem fällt das 
unter IPC, was du gerne als Suchbegriff verwenden kannst, um mehr zu 
erfahren. Gibt's bestimmt auch eine Menge Beispiele für Windows in der 
Sprache deiner Wahl zu.
Wenn es wirklich nur um einen einzelnen Wert geht, ist die Übergage per 
Aufrufparameter sicherlich die Sinnvollste. Zurückgeben kannst du dann 
am einfachsten im stdout der Konsolenanwendung. IIRC kannst du 
CreateProcess() Pipes für die Standard-Streams des neuen Prozesses 
übergeben, um mit diesem zu kommunizieren.
Eventuell ist es sinnvoll, dafür zu sorgen, dass die Konsolenanwendung 
kein Fenster erzeugt. Das ist immer so hässlich unter Windows, wenn 
unvermittelt irgendwelche leeren (weil Inhalt per Pipes bearbeitet wird) 
Konsolen-Fenster aufpoppen. Die $USER dann evtl. auch noch schließen und 
so zu blöden Fehlern führen kann.

Reinhard Kern schrieb:
> Unter Linux sicher auch.

Klar.

int i = 122;
if (!fork()) {
  /* Nur noch die Standard-Streams verwenden. */
}

i behält übers Forken seinen Wert :D

*) Nein, das alleine bringt nichts, da fehlt mindestens ein wait() und 
überhaupt ist das so Käse.

von Lars (Gast)


Lesenswert?

In Befehlszeilenargumente schreiben ich dann die Variablennamen rein und 
weise die dann im Quellcode den Variablen die Argumente zu

Ist das so richtig?

von Lars (Gast)


Lesenswert?

Fehler

Die Eingabezeichenfolge hat das falsche Format.
1
 string mengeanBildern = args[2];
2
            int i = Convert.ToInt32(mengeanBildern);


Wo ist denn da der Formatfehler?

von Peter II (Gast)


Lesenswert?

Lars schrieb:
> Fehler
>
> Die Eingabezeichenfolge hat das falsche Format. string mengeanBildern =
> args[2];
>             int i = Convert.ToInt32(mengeanBildern);
>
> Wo ist denn da der Formatfehler?

kannst du überhaupt etwas von alleine? Woher sollen wir denn wissen was 
in den string mengeanBildern drin steht? scheinbar ja wohl keine Zahl.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.