1
Windows應用程序動態鏈接CRT。應用程序執行其部分代碼後,它將加載共享庫。共享庫與CRT靜態鏈接。與共享庫和應用程序的CRT鏈接
我的問題是:
如果應用程序在DLL的代碼做了一些修改爲「CRT狀態」(例如重新打開標準輸出的一些文件), 將這些變化是有效的?
謝謝
Windows應用程序動態鏈接CRT。應用程序執行其部分代碼後,它將加載共享庫。共享庫與CRT靜態鏈接。與共享庫和應用程序的CRT鏈接
我的問題是:
如果應用程序在DLL的代碼做了一些修改爲「CRT狀態」(例如重新打開標準輸出的一些文件), 將這些變化是有效的?
謝謝
不,靜態鏈接CRT完全獨立於動態加載的CRT。文件表是不同的,堆是不同的,一切都不一樣。
謝謝。但我仍然不明白爲什麼在這種情況下,printf結果將轉到文件,而不是「屏幕」,如果重新打開只在應用程序中完成。 – Yakov 2012-04-20 11:04:09
CRT有可能使用['SetStdHandle'函數](http://msdn.microsoft.com/en-us/library/windows/desktop/ms686244(v = vs.85).aspx)重定向stdout到一個文件。在這種情況下,DLL *會受到影響,因爲每個進程只有一個內核接口。我相信MSVC帶有CRT源代碼,所以你可以通過調試來檢查。 – 2012-04-20 19:48:11