相关疑难解决方法(0)

Delphi - 从静态链接的MSVC++编译的DLL捕获stdout和stderr输出

我一直在尝试从MSVC++中编译的DLL中捕获stdoutstderr输出,这是我的Delphi应用程序静态链接到的,但到目前为止都没有成功.

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;
Run Code Online (Sandbox Code Playgroud)

以为我在正确的轨道上,但它不起作用.

  1. SetStdHandle()足够吗?
  2. TFileStream在这里使用是正确的吗?
  3. 我是否正确使用TFileStream进行SetStdHandle()?
  4. 当应用程序加载时,DLL是否可能设置其stdout/stderr句柄?如果是这样,使用SetStdHandle()或等效的最佳位置在哪里?

任何帮助,将不胜感激.

c++ delphi dll stdout stderr

5
推荐指数
1
解决办法
2079
查看次数

标签 统计

c++ ×1

delphi ×1

dll ×1

stderr ×1

stdout ×1