2011-04-09 44 views
1

hI,CRT和WIN32 API

我想知道在CRT使用的窗口。在每個DLL形成win32 API?只有在visual studio下開發軟件才行?

換句話說,Windows操作系統是通過使用除CRT以外的其他東西來執行malloc,寫入/讀取文件等嗎?

感謝

回答

2

的C運行時(在Visual Studio 2010 msvcr100.dll的情況下)包含了C標準庫函數的實現。

C運行時以特定於平臺的方式實現,在Windows中,它使用kernel32.dll(Win32 API的一部分)中的函數來執行其任務。

您可以使用Dependency Walker查看導出和導入的函數和DLL依賴關係。

1

我不知道你想問你的第一個問題。但關於第二種情況:CRT不是特定於Windows的,而是VS特定的。您用VS編譯的C程序將使用MSVCRTxx DLL來提供(大部分)C庫函數。反過來,C庫函數將使用WINAPI來做實際的事情。 WINAPI是與操作系統交流的最後一層。

其他編譯器,如MINGW中的g ++,不會使用MSVCRTxx DLL,但有其自己的。最後,這也將使用WINAPI。例如,在任何實現中,malloc很可能會調用VirtualAlloc

+0

好的,但如果在VS下開發C++軟件,爲什麼仍然需要CRT?爲什麼新的實現不直接使用win32 API和VirtualAlloc? – Guillaume07 2011-04-09 11:37:27

+0

也許有CRT和「CRT ++」lib ...... – Guillaume07 2011-04-09 11:44:06

+0

新的確實叫VirtualAlloc。新的實現包含在運行時中。 – 2011-04-09 12:23:49