从父级重定向时,DLL输出到stderr不起作用

时间:2014-10-17 07:18:27

标签: c++ c windows dll stderr

我已将stdout和stderr重定向到dll中:

dup2(fileno(myLogHandle), fileno(stderr));
dup2(fileno(myLogHandle), fileno(stdout));

从dll测试时工作正常。

std::cout << "cout\n";
std::cerr << "cerr\n";
fprintf(stdout,"stdout\n");
fprintf(stderr,"stderr\n");
fputs("fputs stdout\n",stdout);
fputs("fputs stderr\n",stderr);
system("echo system stdout");
system("echo system stderr 1>&2");

在日志文件中提供以下输出:

cout
cerr
stdout
stderr
fputs stdout
fputs stderr
system stdout
system stderr

但是当另一个DLL(使用LoadLibrary打开)使用stderr时,我在日志文件中没有任何内容。

我是否想念一些明显的东西?

1 个答案:

答案 0 :(得分:1)

那是完全合理的。您不是重定向过程的标准句柄,而是重定向DLL运行时的标准输出和错误设备。另一个DLL似乎正在使用自己的运行时实例。

从根本上说,你这样做是错误的。在创建流程时,应该在流程级别重定向标准输出和标准错误。