我一直在努力捕捉stdout and stderr我的 Delphi 应用程序静态链接到的 MSVC++ 中编译的 DLL 的输出,但到目前为止尚未成功。
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 适合在这里使用吗?
- 我是否正确地将 TFileStream 用于 SetStdHandle() ?
- 当应用程序加载时,DLL 是否可能设置其 stdout/stderr 句柄?如果是这样,使用 SetStdHandle() 或等效函数的最佳位置在哪里?
任何帮助,将不胜感激。
如果 DLL 在加载时获取 stdout 句柄,那么您需要在代码中更改 stdout 句柄后动态加载 DLL。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)