免费色播,亚洲国产欧美国产第一区二区三区,毛片看,日本精品在线观看视频,国产成人精品一区二区免费视频,日本黄色免费网站,一级毛片免费

WIN32/API/SDK/MFC四者之間的聯(lián)系和區(qū)別

來源:網(wǎng)絡(luò)

點(diǎn)擊:1988

A+ A-

所屬頻道:新聞中心

關(guān)鍵詞: WIN32,API,SDK,MFC

      1、WIN32是不是就是指API?

            如果不是的話,WIN32具體是什么東西。

      不是,API你可以理解成系統(tǒng)函數(shù)(應(yīng)用程序接口),Win32是一個子系統(tǒng)。Win32是Windows的一個子系統(tǒng),還有另外的子系統(tǒng)如OS/2、POSIX、WOW等。不同的子系統(tǒng)系統(tǒng)提供了不同的編程接口,即API,一般說的API指的就是Win32 API。

      2、SDK和API的關(guān)系是什么?

      可以說SDK靠千萬的API進(jìn)行支撐。打個比方,他的窗體的創(chuàng)建都是靠一系列的API實現(xiàn)的。

      MFC當(dāng)然也可以調(diào)用API,SDK也行。

      3、SDK和MFC的區(qū)別是什么?

      MFC是對SDK的封裝,通過MFC的一些方法實現(xiàn),實質(zhì)上還是調(diào)用了API進(jìn)行實現(xiàn)。這就是封裝的好處,加快了開發(fā)的速度,減低了開發(fā)的難度。

      上面大家都說Win32是一個子系統(tǒng),這個當(dāng)然是對的,不過我們有時候我們所說Win32通俗的就是指32位的Windows系統(tǒng),從windows95/98到NT/2000/XP都是32位Windows。子系統(tǒng)卻是僅對NT架構(gòu)的系統(tǒng)而言的。我想樓主所問的Win32并不是子系統(tǒng)。

      API就是應(yīng)用程序接口,是由系統(tǒng)提供的一些函數(shù),比如你想創(chuàng)建一個文件,就要調(diào)用CreateFile,這個CreateFile就是一個API。任何一個操作系統(tǒng)都會提供API的,比如DOS也提供API,不過它是通過Int 21h中斷提供的就是了。

      SDK是指一些公司針對某一項技術(shù)為軟件開發(fā)人員制作的一套輔助開發(fā)或者減少開發(fā)周期的工具。一般專指Windows系統(tǒng)提供的相關(guān)的頭文件和LIB文件。

      有時候很多人將不用MFC等相關(guān)類庫,而只用API進(jìn)行開發(fā)的方式也叫做SDK開發(fā),從這一點(diǎn)來說,API和SDK似乎是通用的。

     

      MFC是MS對API的一個封裝,也就是一個C++類庫,當(dāng)然MFC比一般類庫龐大,所以有人稱之為應(yīng)用程序框架。但其本質(zhì)還是一個類庫

      Windows程序有用戶態(tài)和核心態(tài)的說法。在32位地址空間中,0x80000000以下屬于用戶態(tài),0x80000000以上屬于核心態(tài)。所有硬件管理都在核心態(tài)。用戶態(tài)程序的不能直接使用核心態(tài)的任何代碼。所謂核心態(tài)其實只是CPU的一種保護(hù)模式。在x86 CPU上,用戶態(tài)處于ring 3,核心態(tài)處于ring 0。

      從用戶態(tài)進(jìn)入核心態(tài)的最常用的方法是在寄存器eax填一個功能碼,然后執(zhí)行int 2e。這有點(diǎn)像DOS時代的DOS和BIOS系統(tǒng)調(diào)用。在NT架構(gòu)中這種機(jī)制被稱作system service。

      在核心態(tài)提供system service的有兩個家伙:ntoskrnl.exe和win32k.sys。ntoskrnl.exe是Windows的大腦,它的上層被稱為Executive,下層被稱作Kernel。Win32k.sys提供與顯示有關(guān)的system service。

      在用戶態(tài)一側(cè),有一個重要的角色叫作ntdll.dll,大多數(shù)system service都是它調(diào)用的。它封裝這些system service,然后提供一個API接口。這個接口被稱作native API。 native API的用戶是各個子系統(tǒng)(subsystem),包括Win32子系統(tǒng)、OS/2子系統(tǒng)、POSIX子系統(tǒng)。各個子系統(tǒng)為Win32、OS2、POSIX程序提供了運(yùn)行平臺。

      ntdll.dll由于提供了平臺無關(guān)的API接口,所以被看作是NT系統(tǒng)的原生接口,由之得到了“native API”的匪號。其實它的主要工作是將調(diào)用傳遞到核心態(tài)。

      Win32、OS/2、POSIX,聽起來很龐大。其實真正做好的只有Win32子系統(tǒng)。OS2、POSIX都是Console UI,即只有字符界面。提供OS/2子系統(tǒng),只因為在1988年,NT的主要設(shè)計目標(biāo)就是與OS/2兼容,后來由于Windows 3.0賣得很好,所以設(shè)計目標(biāo)被變更為與Windows兼容。提供POSIX子系統(tǒng),是為了應(yīng)付美國政府的一個編號為FIPS 151-2的標(biāo)準(zhǔn)。

      Win32子系統(tǒng)的管理員是一個叫作csrss.exe的弟兄,它的全名是:Client/Server Run-Time Subsystem。它剛上任時,本來要分管所有的子系統(tǒng),但后來POSIX和OS/2都被分別處理了,所以只管了一個Win32。即使這樣也很了不起,所有的Win32程序的進(jìn)程、線程們都要向它登記。

      不過Win32程序用得最多的還是Win32子系統(tǒng)的DLL們,最核心的DLL包括:kernel32.dll、User32.dll、Gdi32.dll、Advapi32.dll。這些DLL包裝了ntdll.dll的native API。其中Gdi32.dll比較特殊,它與核心態(tài)的win32k.sys直接保持聯(lián)系,以提高NT系統(tǒng)的圖形處理能力。Win32子系統(tǒng)的DLL們提供的接口函數(shù)在MSDN文檔中被詳細(xì)介紹,它們就是Win32 API。

    (審核編輯: 智匯小新)