我有一個用VS2008構建的Win32程序,所以我的代碼與MSVCR90.DLL和MSVCP90.DLL鏈接。但是,它也在DLL中運行代碼(我無法修改),這是使用VS2005構建的,當DLL中的代碼打印到堵塞流時,它通過MSVCR80.DLL和MSVCP80.DLL執行。這裏的問題是:如果我在代碼中重新路由std :: clog,我只影響針對crt 9.0 libs構建的代碼,使用舊版crt 8.0的代碼將不會使其輸出重新路由。那麼是否有一種方法可以在針對較舊的CRT構建的DLL中重新路由clog流?如何在另一個CRT庫中重新路由std :: clog?
我調查了舊CRT CRT DLL上調用GetModuleHandle()和GetProcAddress()並設法重新路由C stderr流(通過_open_osfhandle和_dup2),但是C++阻塞流似乎仍然不受影響。我想我還需要在較舊的CRT庫中調用ios_base :: sync_with_stdio(),但我無法獲得該函數的有效地址。任何幫助將不勝感激。
謝謝。
謝謝,但要去延遲加載的DLL方法。 – quzox 2011-05-12 18:57:38