现在的位置: 首页 > 综合 > 正文

VC_概念_WIN32/API/SDK/MFC四者之间的联系和区别

2014年01月13日 ⁄ 综合 ⁄ 共 1547字 ⁄ 字号 评论关闭

1、WIN32是不是就是指API?如果不是的话,WIN32具体是什么东西。 
====================
不是,API你可以理解成系统函数(应用程序接口),Win32是一个子系统。楼上的很厉害,对内核研究得很透,POSIX都说出来了....

2、SDK和API的关系是什么?
=================
可以说SDK靠千万的API进行支撑。打个比方,他的窗体的创建都是靠一系列的API实现的。
MFC当然也可以调用API,SDK也行。
 
3、SDK和MFC的区别是什么? 
====================
MFC是对SDK的封装,通过MFC的一些方法实现,实质上还是调用了API进行实现。这就是封装的好处,加快了开发的速度,减低了开发的难度

 

以下是概念介绍,可从理论上支持。

Windows程序有用户态和核心态的说法。在32位地址空间中,0x80000000以下属于用户态,0x80000000以上属于核心态。所有硬件管理都在核心态。用户态程序的不能直接使用核心态的任何代码。所谓核心态其实只是CPU的一种保护模式。在x86 CPU上,用户态处于ring 3,核心态处于ring 0。

从用户态进入核心态的最常用的方法是在寄存器eax填一个功能码,然后执行int 2e。这有点像DOS时代的DOS和BIOS系统调用。在NT架构中这种机制被称作system service。 

在核心态提供system service的有两个家伙:ntoskrnl.exe和win32k.sys。ntoskrnl.exe是Windows的大脑,它的上层被称为Executive,下层被称作Kernel。Win32k.sys提供与显示有关的system service。

在用户态一侧,有一个重要的角色叫作ntdll.dll,大多数system service都是它调用的。它封装这些system service,然后提供一个API接口。这个接口被称作native API。 native API的用户是各个子系统(subsystem),包括Win32子系统、OS/2子系统、POSIX子系统。各个子系统为Win32、OS2、POSIX程序提供了运行平台。

ntdll.dll由于提供了平台无关的API接口,所以被看作是NT系统的原生接口,由之得到了“native API”的匪号。其实它的主要工作是将调用传递到核心态。

Win32、OS/2、POSIX,听起来很庞大。其实真正做好的只有Win32子系统。OS2、POSIX都是Console UI,即只有字符界面。提供OS/2子系统,只因为在1988年,NT的主要设计目标就是与OS/2兼容,后来由于Windows 3.0卖得很好,所以设计目标被变更为与Windows兼容。提供POSIX子系统,是为了应付美国政府的一个编号为FIPS 151-2的标准。

Win32子系统的管理员是一个叫作csrss.exe的弟兄,它的全名是:Client/Server Run-Time Subsystem。它刚上任时,本来要分管所有的子系统,但后来POSIX和OS/2都被分别处理了,所以只管了一个Win32。即使这样也很了不起,所有的Win32程序的进程、线程们都要向它登记。

不过Win32程序用得最多的还是Win32子系统的DLL们,最核心的DLL包括:kernel32.dll、User32.dll、Gdi32.dll、Advapi32.dll。这些DLL包装了ntdll.dll的native API。其中Gdi32.dll比较特殊,它与核心态的win32k.sys直接保持联系,以提高NT系统的图形处理能力。Win32子系统的DLL们提供的接口函数在MSDN文档中被详细介绍,它们就是Win32 API。

抱歉!评论已关闭.