AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

standard error output in D4/5?

Ein Thema von himitsu · begonnen am 15. Jul 2006 · letzter Beitrag vom 15. Jul 2006
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#1

standard error output in D4/5?

  Alt 15. Jul 2006, 14:40
Tachchen,

in D7 is ja folgende Variable in der SystemUnit definiert,
Var ErrOutput: Text; allerdings ist diese noch nicht unter D4 verfügbar
und ich konnte auch keinen Ersatzt finden. -.-''

Was soll ich denn jetzt machen?

Bräuchte es für diese Zeilen:
Code:
If @F = @[b]ErrOutput[/b] Then F.Handle := [b]GetStdHandle(STD_ERROR_HANDLE)[/b]
Else F.Handle := [b]GetStdHandle(STD_OUTPUT_HANDLE)[/b];
Im Notfall (wenn es nichts gibt) würde ich wohl STD_OUTPUT_HANDLE (ohne Abfrage) verwenden können ... hoff ich mal.


MbD Frank
$2B or not $2B
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: standard error output in D4/5?

  Alt 15. Jul 2006, 15:47
Deklarier ihn dir einfach:

Delphi-Quellcode:
Var
  ErrOutput: Text;

....

Begin
  TTextRec(ErrOutput).Mode := fmWrite;
  TTextRec(ErrOutput).Handle := GetStdHandle(STD_ERROR_HANDLE);
End.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

Re: standard error output in D4/5?

  Alt 15. Jul 2006, 16:28
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
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


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;
$2B or not $2B
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: standard error output in D4/5?

  Alt 15. Jul 2006, 17:32
Ich weiss zwar nicht was das andere alles zu bedeuten hat was du so geschrieben hast, aber eine Anmerkung habe ich noch:

If Mode = fmOutput and 3 Then Begin 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...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

Re: standard error output in D4/5?

  Alt 15. Jul 2006, 18:31
Bei den Dateifunktionen gibt es nicht nur diese 4 Möglichkeiten ... das einzige was wirklich "genormt" ist, sind die letzten 2 Bits.
Delphi-Quellcode:
Const fmClosed = $D7B0;
  fmInput = $D7B1;
  fmOutput = $D7B2;
  fmInOut = $D7B3;
also sozusagen:
Delphi-Quellcode:
Const _fmClosed = $0;
  _fmInput = $1;
  _fmOutput = $2;
  _fmInOut = $3;
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.

Zusammen mit dem vorangegangen Code kommt sozusagen folgendes raus,
If Mode and 3 = fmOutput and 3 Then ... 's sieht doch viel eindeutiger aus, als
Delphi-Quellcode:
If Mode and $0003 = $0002 Then ...

//oder eben
If Mode = 2 Then ...
$2B or not $2B
  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 18:59 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