我一直在尝试从我的 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() 或等效的最佳位置?
任何帮助,将不胜感激。