![]() |
standard error output in D4/5?
Tachchen,
in D7 is ja folgende Variable in der SystemUnit definiert,
Delphi-Quellcode:
allerdings ist diese noch nicht unter D4 verfügbar
Var ErrOutput: Text;
und ich konnte auch keinen Ersatzt finden. -.-'' Was soll ich denn jetzt machen? Bräuchte es für diese Zeilen:
Code:
Im Notfall (wenn es nichts gibt) würde ich wohl STD_OUTPUT_HANDLE (ohne Abfrage) verwenden können ... hoff ich mal.
If @F = @[b]ErrOutput[/b] Then F.Handle := [b]GetStdHandle(STD_ERROR_HANDLE)[/b]
Else F.Handle := [b]GetStdHandle(STD_OUTPUT_HANDLE)[/b]; MbD Frank |
Re: standard error output in D4/5?
Deklarier ihn dir einfach:
Delphi-Quellcode:
Var
ErrOutput: Text; .... Begin TTextRec(ErrOutput).Mode := fmWrite; TTextRec(ErrOutput).Handle := GetStdHandle(STD_ERROR_HANDLE); End. |
Re: standard error output in D4/5?
Also gibt/gab es demnach nocht nichts dafür?
Na ja, dann bleib ich wohl dennoch besser bei STD_OUTPUT_HANDLE, da andererseits ja auch schon STD_OUTPUT_HANDLE verwendet wird ^^
Code:
If [b]Mode = fmOutput[/b] and 3 Then Begin
F.InOutFunc := @_TextOut; {$IFDEF _NewMode} If @F = @ErrOutput Then F.Handle := GetStdHandle(STD_ERROR_HANDLE) Else {$ENDIF} F.Handle := GetStdHandle([b]STD_OUTPUT_HANDLE[/b]); End Else Begin F.InOutFunc := @_TextIn; F.Handle := GetStdHandle([b]STD_INPUT_HANDLE[/b]); End; außerdem wüde der Zweizeiler dann auch nicht mehr so schon (kurz) aussehn :roll:
Delphi-Quellcode:
{$IFDEF _NewMode} If @F = @ErrOutput Then {$ENDIF} F.Handle := GetStdHandle(STD_ERROR_HANDLE)
{$IFDEF _NewMode} Else F.Handle := GetStdHandle(STD_OUTPUT_HANDLE) {$ENDIF} ; // oder {$IFDEF _NewMode} If @F = @ErrOutput Then F.Handle := GetStdHandle(STD_ERROR_HANDLE) Else F.Handle := GetStdHandle(STD_OUTPUT_HANDLE); {$ELSE} F.Handle := GetStdHandle(STD_ERROR_HANDLE); {$ENDIF} Hätte dieses Verhalten zwar beheben können, allerings reagieren diese Funktionen ja "genauso" wie die Originale, bis auf die Tatsache, das hier mit 64-Bit gerechnet wurd. Und als Nebeneffekt daß kein DatenTyp ausgeschlossen wird ... unteranderem wegen genau diesem Verhalten, mit dem Puffer) schließt der DelphiCmpiler TextFile von den Seek-/SizeFunktionen aus :zwinker: Du kannst es aber mal so versuchen:
Delphi-Quellcode:
// für Schreibzugriff:
RealPos := FilePos64(F) + TFileRec(F).BufEnd - TFileRec(F).BufPos; // für Lesezugriff: RealPos := FilePos64(F) + TFileRec(F).BufPos; |
Re: standard error output in D4/5?
Ich weiss zwar nicht was das andere alles zu bedeuten hat was du so geschrieben hast, aber eine Anmerkung habe ich noch:
Delphi-Quellcode:
Was soll dieser Code bewirken? fmOutput ist eine Konstante und mit $D7B2 definiert. Somit wird immer 2 übrig bleiben - ich verstehe aber denn Sinn nicht eine Konstante mit einer logischen Operation zu verändern, da das Ergebnis genauso konstant ist und man somit direkt auf das Ergebnis vergleichen könnte...
If Mode = fmOutput and 3 Then Begin
|
Re: standard error output in D4/5?
Bei den Dateifunktionen gibt es nicht nur diese 4 Möglichkeiten ... das einzige was wirklich "genormt" ist, sind die letzten 2 Bits.
Delphi-Quellcode:
also sozusagen:
Const fmClosed = $D7B0;
fmInput = $D7B1; fmOutput = $D7B2; fmInOut = $D7B3;
Delphi-Quellcode:
Theoretisch ist es möglich für bestimmte Dateitypen auch verschiedene Methoden zu implementieren, welche sich Anhand der ersten 14 Bits unterscheiden lassen, wobei halt die letzten immer die Richtung angeben.
Const _fmClosed = $0;
_fmInput = $1; _fmOutput = $2; _fmInOut = $3; Zusammen mit dem vorangegangen Code kommt sozusagen folgendes raus,
Delphi-Quellcode:
's sieht doch viel eindeutiger aus, als
If Mode and 3 = fmOutput and 3 Then ...
Delphi-Quellcode:
If Mode and $0003 = $0002 Then ...
//oder eben If Mode = 2 Then ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz