Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Rückgabewert nach bzw. beim Beenden ausgeben. (https://www.delphipraxis.net/1499-rueckgabewert-nach-bzw-beim-beenden-ausgeben.html)

StTüff 3. Dez 2002 13:17


Rückgabewert nach bzw. beim Beenden ausgeben.
 
Hallo Zusammen!

Als Neuling habe ich gleich mal eine Frage: :roll:

Ich würde gerne ein (Win32-)Programm aus der Console mit Parametern
starten (soweit kein Problem) und beim Beenden einen Fehlercode
(oder eben 0 für keinen Fehler) in die Console zurückschreiben.

Was nicht geht ist:

FhStdOut := GetStdHandle(STD_OUTPUT_HANDLE);
if FhStdOut<>0 then
WriteConsole(FhStdOut,PChar(s),Length(s),ulLength, NIL);


Hierbei erhalte ich immer FhStdOut=0

Wenn ich eine neue Console öffne, dann kann ich etwas ausgeben.

Das Problem ist also, dass ich kein Handle für die Console habe
und auch keine Ahnung habe, wo ich dieses herbekomme.

Meine Idee war folgende:

1. Ein anderes Programm ruft mein Programm mit einem Parameter
auf.

2. Der User benutzt das Programm.

(Bis hierher alles OK)

3. Wenn der User das Programm beendet wird ein Rückgabewert
an das aufrufende Programm übergeben.

Natürlich könnte ich diesen Rückgabewert auch in eine Datei
schreiben, es müsste doch aber auch über die Console gehen,
oder?

Hat mir vielleicht jemand einen Tip? :?:

Gruß,

StTüff

PS: Vielleicht gehört das eher zu "Windows API",
vielleicht aber auch nicht?!

Christian Seehase 3. Dez 2002 13:44

Moin StTüff,

erst einmal herzlich willkommen.

Nun zu Deinem Problem:
Die Funktion GetStdHandle ist fehlgeschlagen, wenn sie INVALID_HANDLE_VALUE (entspricht -1 bzw. $FFFFFFFF) als Rückgabewert hat. 0 ist in Ordnung.

Willst Du jetzt einen Text ausgeben, oder einen Wert für ERRORLEVEL setzen?

In letzeren Falle müsste das wunderbar mit der Prozedur HALT(..) gehen.

StTüff 3. Dez 2002 14:15

Hallo!

Danke für die schnelle Antwort!

Ich würde gerne beides machen. Den ExitCode kann das
aufrufende Programm verwenden. Soweit OK, dass geht
(Danke!). Ich würde aber den Fehlercode auch gerne
optisch in der Console anzeigen.

Hast Du auch dazu eine Idee!

Gruß und noch mal besten Dank! :D

StTüff

Christian Seehase 3. Dez 2002 15:11

Moin StTüff,

funktioniert WriteConsole bei Dir nicht?

Delphi-Quellcode:
program Project2;
{$APPTYPE CONSOLE}
uses sysutils,windows;

var
  hStd    : DWORD;
  sMessage : string;
  dwDummy : DWORD;

begin
  hStd := GetStdHandle(STD_OUTPUT_HANDLE);
  if hStd <> INVALID_HANDLE_VALUE then
  begin
    sMessage := 'MELDUNG'+#00;
    WriteConsole(hStd,@sMessage[1],Length(sMessage),dwDummy,nil);
  end;
end.
Wenn ich hier im Einzelschritt durchgehe, habe ich den Text aus sMessage in der Konsole stehen, nachdem WriteConsole abgearbeitet wurde.

StTüff 3. Dez 2002 15:26

Hallo Chris!

Jain! Wenn ich eine Console "erzeuge",
(AllocConsole())
dann geht's. Ich schaffe es allerdings nicht in
die Console zu schreiben, aus der das Programm
aufgerufen wurde. Wichtig ist hierbei noch,
dass es sich bei dem Programm nicht um eine
Consolenanwendung handelt.

Also nicht: {$APPTYPE CONSOLE}

Deshalb landet der Text im Nirvana.

Ich brauch also ein Handle von der
Console, von der der Aufruf gekommen
ist.

Gruß,

StTüff

Christian Seehase 3. Dez 2002 16:19

Moin StTüff,

das hatt' ich bislang auch noch nicht probiert ;-)

Aber ist schon lustig. Selbst wenn ich mit FreeConsole die Konsole freigebe, erhalte ich ein gültiges Handle, sowohl für StdOut, StdErr alsauch für StdIn :shock:

Nur ich sehe (wie Deiner Angabe nach zu erwarten war) natürlich nichts :shock: :shock:

Vielleicht gibt's ja eine Lösung, aber mit Konsolen (und vor allem deren Verbindung zu nicht-Konsolen Anwendungen) hab' ich mich bislang noch nicht beschäftigt.

StTüff 4. Dez 2002 12:32

Hallo Chris!

Auf jeden Fall noch mal besten Dank, vielleicht
finde ich ja noch einen Weg.
(Vielleicht die ganze Anwendung in eine Consolenanwendung
kapseln?!)

Viele Grüße,

StTüff


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz