AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Rückgabewert nach bzw. beim Beenden ausgeben.
Thema durchsuchen
Ansicht
Themen-Optionen

Rückgabewert nach bzw. beim Beenden ausgeben.

Ein Thema von StTüff · begonnen am 3. Dez 2002 · letzter Beitrag vom 4. Dez 2002
Antwort Antwort
StTüff

Registriert seit: 3. Dez 2002
132 Beiträge
 
Delphi 2006 Enterprise
 
#1

Rückgabewert nach bzw. beim Beenden ausgeben.

  Alt 3. Dez 2002, 14:17
Hallo Zusammen!

Als Neuling habe ich gleich mal eine Frage:

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?!
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#2
  Alt 3. Dez 2002, 14: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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
StTüff

Registriert seit: 3. Dez 2002
132 Beiträge
 
Delphi 2006 Enterprise
 
#3
  Alt 3. Dez 2002, 15: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!

StTüff
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#4
  Alt 3. Dez 2002, 16: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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
StTüff

Registriert seit: 3. Dez 2002
132 Beiträge
 
Delphi 2006 Enterprise
 
#5
  Alt 3. Dez 2002, 16: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
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#6
  Alt 3. Dez 2002, 17: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

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

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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
StTüff

Registriert seit: 3. Dez 2002
132 Beiträge
 
Delphi 2006 Enterprise
 
#7
  Alt 4. Dez 2002, 13: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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:27 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