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:
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;
Lass ich das mit der Konsolenanwendung in den Optionen weg und schreibe statt dessen...
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
AllocConsole;
stdout := GetStdHandle(STD_OUTPUT_HANDLE);
end;
...erscheint wieder ein Konsolenfenster, aber beim Test krieg ich weder in der Konsole, noch im Memo einen Text.
Ändere ich den BuutonKlick aber in
Delphi-Quellcode:
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;
...seh ich das foo im Konsolenfenster und auch in der Memo.
Scheint ein Rechteproblem im Zusammenhang mit
DLL´s zu sein.
Nur wie löse ich es über den Weg mit AllocConsole?
...to be continued