如何從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.
但由於某種原因失敗。你能否引導我以正確的方式寫入標準輸出?
好奇爲什麼你想把二進制噪聲寫入控制檯?你提到了文本到語音的一些內容。爲什麼不命名管道? – 2013-03-22 01:14:48
命名管道對標準輸出有什麼優勢? – Kromster 2013-03-22 05:17:05
專爲Windows上的嚴重數據傳輸而非用戶界面而設計。 Unix標準輸出通常用作匿名數據管道。 DOS和Windows不經常使用這個。如你所知。 – 2013-03-22 11:35:23