关于Windows API、CRT和STL二三事

本文探讨了Windows API、C运行时库(CRT)和STL之间的关系。CRT提供泛型文字转换技术,支持SBCS、_MBCS和_UNICODE字符集。STL作为C++标准库的一部分,包含容器、迭代器、算法等功能。文章还讨论了静态链接和动态链接 CRT/C++ 库的优缺点,并指出动态链接利于模块化和跨平台开发。
摘要由CSDN通过智能技术生成
1.本文编写目的
    本文是为了帮助一些人弄清一些关于Windows API, C运行时程序库(CRT), 和标准C++库(STL)的基本概念。有很多人甚至是有经验的程序员在这些概念上是含糊不清的甚至是有错误观点。如果你想知道他们是在什么基础上实现的并且一直没时间弄清楚这些概念,请花费点时间阅读下本文。
2. 基本概念
   下面这幅图代表了WinAPI、CRT和STL三者之间的关系。
    表 1: Windows API、CRT和C++标准库之间的关系图
 
    相邻的模块之间可以相互通讯。为什么这么说呢?下面依照这幅图从下到上依次说说明。
2.2. 硬件层
    每个硬件部分都有自己的命令集,操作系统通过这些命令集控制硬件并与硬件通信。不同硬件部分的命令集数量和复杂度差别很大。通常,同样的硬件如果由不同的硬件厂商实现,它们通常会在标准的命令集外提供一些扩展,使用这些扩展通常可以发挥这些硬件的特性。如果每个程序编写者都针对这些硬件重写一遍程序,每个硬件的生产厂家都有很多,那会把码农们累死滴!于是上帝说,要有操作系统,于是人类 有了一个方便的访问硬件的统一平台。
2.3 操作系统
    操作系统的目的之一就是把底层硬件的特性给封装起来,然后提供一个统一的接口,以便于计算机操作人员控制硬件。现代版本的操作系统不再允许应用程序直接访问硬件,操作系统能直接访问硬件层时,称操作系统处于核心态(kernel mode)。
    一些老版本的操作系统,如MS-DOS,允许编程人员直接访问硬件。虽然这样做可以使他们写出来的程序能够在一段短的时间内应用硬件的某些高级特性,但是长远来说这样做对这个程序是有害的,因为这个程序将不能在这个硬件的新版本上运行。
2.4 应用程序编程接口(Application Programming Interface)
    现代的应用程序如果想访问硬件,就必须通过操作系统,具体来说就是使用操作系统提供的API。一个API就是一些功能的统一接口,它能把硬件的这些功能抽象地统一起来,让程序员集中精力实现他们想要的功能。应用程序已经不可能绕过现代的操作系统直接访问硬件,一种更普遍的说法就是应用程序以用户态(user mode)运行。MS Windows提供的API是一群C函数的集合。Windows平台的最低层次的开发语言就是C语言。
2.4.1 平台软件开发包(Platform Software Development Kit)
    MS发布了一个免费的平台软件开发包(简称之为Platform SDK或PSDK)以促使软件开发员在windows平台上开发软件。PSDK包含如下东东:
   1. 包含这些API生命的头文件
   2. 用于连接的相应的库文件(通过它们能够在相应的DLL中定位到这些API函数)
   3. 相关的说明文档
   4. 各种帮助工具
    例如,如果要打开或创建一个文件,我们要调用函数CreateFile,它在头文件"WinBase.h"中声明,通过库文件"Kernel32.lib"在dll文件中进行函数定位。
    Windows API的函数名称依照骆驼命名法命名,因此不同的函数很容易区分。常量和宏的命名一般是大写。在相应的文档里,会详细的说明每个函数所需要的头文件、库文件以及能够运行的相关平台。
    一个Windows应用程序能够调用任何windows的API函数,前提是应用程序能够正确的找到这个函数的签名并且能够链接到相应的库文件,或者通过函数GetProcAddress和函数签名(一般就是函数的名称)直接连接到它在dll库文件中的地址。
2.5 C运行时程序库
    基于操作系统的API函数,软件厂商实现了C运行时程序库(CRT)。CRT由一些头文件和相应的源文件构成,这些文件实现了一些基础的公共操作,如字符串操作、一些数学运算函数和基本的输入/输出等操作。通常的,如果一家厂商发布了一个C编译器,它会附带一些CRT库。一些国际标准化组织负责制定C语言的标准并实现一些运行时程序库。
2.5.1 标准和扩展
    理论上,如果一个程序使用标准C语言开发的,并且有一个平台支持其相应的标准C编译器和动态库,那么这个程序就能在这个平台上运行。但是实际上每个C编译器开
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值