Thema: TTimer in DLL

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: TTimer in DLL

  Alt 10. Nov 2023, 09:42
Ahhhhhhh, du willst es nich wissen.

Die alte CMD-Console war synchron, aber die neue Pseudo-Console ist asynchron,
da ich die Steuerbefehle noch nicht alle kenne, weiß ich noch nicht, wie ich auf's Ende des SubProzesses warten muß (weil da nichts in der Doku gefunden), also ist nach dem WriteFile noch keine Wartefunktion

leider ist das Prozessdesign für Einzelbefehle (ohne explizites Open) so, dass sofort das Close kam und der Timer und Handle freigegeben wurden.


Da es Vieles zu "Timer in DLL geht nicht" zu finden gab, hatte ich erstmal dort gesucht.


Delphi-Quellcode:
procedure TConsoleScript.ConsoleOutputTimer(Sender: TObject);
var
  Count: DWORD;
  Buffer: UTF8String;
begin
  if PeekNamedPipe(FOutputRead, nil, 0, nil, @Count, nil) and (Count > 0) then begin
    SetLength(Buffer, Count);
    ReadFile(FOutputRead, PAnsiChar(Buffer)^, Count, Count, nil);
    WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), PAnsiChar(Buffer)^, Count, Count, nil);
  end;
end;
Jetzt wird das aufgerufen

Mußte aber noch das and (Count > 0) anhängen, da selbst ein ReadFile mit Count=0 blockierend wartet, bis neue Daten rein kommen (von denen man aber "nichts" haben will)




PS: Im Prinzip ist die neue Console jetzt wieder fast so, wie früher unter DOS, also mit Escape-Befehlen im Stream, anstatt parallel mit zusätzlichen APIs (es gibt nur noch einen dritten Befehl, um die Größe des Fensters/Ausgabebereichs zu ändern).
Sowie es gibt "eigentlich" keinen StdErr, der ist farblich im StdOut mit drin.
Delphi-Quellcode:
function CreatePseudoConsole(size: COORD; hInput, hOutput: THandle; dwFlags: DWORD; out phPC: HPCON): HRESULT; stdcall;
function ResizePseudoConsole(hPC: HPCON; size: COORD): HRESULT; stdcall;
procedure ClosePseudoConsole(hPC: HPCON); stdcall;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (10. Nov 2023 um 09:48 Uhr)
  Mit Zitat antworten Zitat