![]() |
Ausgaben an StdOut aus DLL lesen
Hallo zusammen,
ich konnte den Titel irgendwie nicht besser formulieren. Ich habe eine C DLL in der einige Funktionen sind. Diese Funktionen werden in einer GUI Anwendung von mir aufgerufen. Ich weiss, daß sich innerhalb der Funktionen Ausgaben an stdout mittels writeln befinden. Wie kann ich diese Ausgaben in meinem GUI-Programm lesen? Ich denke, ich müsste beim Start meiner GUI Anwendung einen nicht sichtbaren Konsolenprozess starten. Zu diesem Prozess wahrscheinlich eine Pipe aufbauen und aus dieser Pipe dann die Ausgaben lesen. Passt die Überlegung einigermassen oder müsste ich anders vorgehen? Wie müsste ich konkret das Ganze machen? |
Re: Ausgaben an StdOut aus DLL lesen
Ich habe eine kleine Testapplikation erstellt.
Wenn ich in den Projektoptionen bei Linker/Konsolenanwendung markiere krieg ich mit folgendem Weg die Ausgaben aus der Console in mein Memo. Es erscheint halt aber ein sichtbares Konsolenfenster.
Delphi-Quellcode:
Lass ich das mit der Konsolenanwendung in den Optionen weg und schreibe statt dessen...
procedure TForm1.FormCreate(Sender: TObject);
begin stdout := GetStdHandle(STD_OUTPUT_HANDLE); end; procedure TForm1.Button1Click(Sender: TObject); var coord: _COORD; readed: Cardinal; text: string; begin ExecuteFunctionFromDLL(); coord.x := 0; coord.y := 0; SetLength(text, 2048); ReadConsoleOutputCharacter(stdout, PChar(text), 2048, coord, readed); memo1.Lines.Text := Text; end;
Delphi-Quellcode:
...erscheint wieder ein Konsolenfenster, aber beim Test krieg ich weder in der Konsole, noch im Memo einen Text.
procedure TForm1.FormCreate(Sender: TObject);
begin AllocConsole; stdout := GetStdHandle(STD_OUTPUT_HANDLE); end; Ändere ich den BuutonKlick aber in
Delphi-Quellcode:
...seh ich das foo im Konsolenfenster und auch in der Memo.
procedure TForm1.Button1Click(Sender: TObject);
var coord: _COORD; readed: Cardinal; text: string; begin writeln('foo'); coord.x := 0; coord.y := 0; SetLength(text, 2048); ReadConsoleOutputCharacter(stdout, PChar(text), 2048, coord, readed); memo1.Lines.Text := Text; end; Scheint ein Rechteproblem im Zusammenhang mit DLL´s zu sein. Nur wie löse ich es über den Weg mit AllocConsole? ...to be continued |
Re: Ausgaben an StdOut aus DLL lesen
Das schreiben ins StdOut muss ja über irgendeine Funktion geschehen.
Diese Funktion könnte man eventuell auf eine eigene umbiegen, um so an die Daten zu kommen. Leider weiß ich so auch nicht, wie die Funktion heißen könnte, die dafür in Frage kommt... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:25 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-2025 by Thomas Breitkreuz