Delphi アプリが静的にリンクする MSVC++ でコンパイルされた DLL からstdoutおよびstderr出力をキャプチャしようとしましたが、これまでのところ成功していません。
procedure Test;
var
fs: TFileStream;
begin
fs := TFileStream.Create('C:\temp\output.log', fmCreate or fmShareDenyWrite);
SetStdHandle(STD_OUTPUT_HANDLE, fs.Handle);
SetStdHandle(STD_ERROR_HANDLE, fs.Handle);
dllFunc(0); // Writes to stdout in MSVC++ console app, but not here
// fs.Length is always zero
fs.Free;
end;
私は正しい軌道に乗っていると思っていましたが、うまくいきません。
- SetStdHandle() で十分ですか?
- ここで TFileStream を使用するのは適切ですか?
- SetStdHandle() に TFileStream を適切に使用していますか?
- アプリの読み込み時に DLL が stdout/stderr ハンドルを設定することは可能ですか? もしそうなら、 SetStdHandle() または同等のものを使用するのに最適な場所はどこですか?
どんな助けでも大歓迎です。