Delphiコンソールアプリケーションからstdoutに書き込む方法を教えてください。Delphiでバイナリデータをstdoutに書き込む方法は?
ここに私が試したことがあります。
program ConsoleOut;
{$APPTYPE CONSOLE}
uses
Classes, Windows, SysUtils;
var
S: TMemoryStream;
OutputStream: THandleStream;
ss: string;
Buffer: PByte;
i: Integer;
begin
S := TMemoryStream.Create;
S.LoadFromFile('1.jpg');
S.Seek(0, soFromBeginning);
//Am I right that from now on writing to OutputStream will write to stdout?
OutputStream := THandleStream.Create(GetStdHandle(STD_OUTPUT_HANDLE));
GetMem(Buffer, S.Size);
S.ReadBuffer(Buffer^, S.Size);
i := OutputStream.Write(Buffer^, S.Size); //i = 0 here for some reason
FreeMem(Buffer, S.Size);
Writeln(i, ' byte written to output');
Readln(ss); //Don't exit app to read previous line
S.Free;
end.
をしかし、それが失敗した何らかの理由:私はそれが標準出力をコンソールにディスクと出力からファイルを読み取るために、私は見つけることができるに関する情報によると、この簡単なテストアプリケーションを装備しています。あなたは私をstdoutに書く正しい方法に向かわせてください。
奇妙な理由コンソールにバイナリノイズを書きたいのですが?あなたはスピーチのテキストについて言及します。なぜ名前付きパイプはありませんか? –
名前付きパイプはstdoutに対してどのような利点がありますか? – Kromster
Windowsでは、ユーザーインターフェイスの代わりに深刻なデータ転送用に設計されています。 Unix標準出力は、匿名データパイプとして日常的に使用されています。 DosとWindowsはこれを日常的に使用していません。あなたが学んだように。 –