0
我重定向輸出和錯誤的DLL與重定向時不起作用。DLL輸出到stderr從父
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打開)採用標準錯誤我不明白在日誌文件中任何東西。
我想念一些明顯的東西嗎?
一個簡單的解釋,通常是正確的,是DLL是用自己的CRT構建的,或者正在使用它自己的CRT。你在你的EXE的副本中替換了stdout而不是DLL。如果無法控制DLL的構建,則依賴全局CRT狀態永遠不會成爲問題。 – 2014-10-17 08:36:46
謝謝!你是對的,在改變代碼生成和運行時庫後,這兩個DLL的使用相同(一個使用靜態版本)。 – Tobias 2014-10-17 16:42:42