提问人:MainID 提问时间:1/8/2009 最后编辑:Andreas BoniniMainID 更新时间:2/23/2010 访问量:2696
Windows API 和 C 运行时库之间有什么关系?
What is the relationship between the Windows API and the C run time library?
答:
如果你指的是标准的 C 库(我假设是 msvcrt.dll)。然后就不多了。大多数 Windows API 是在单独的 dll 中实现的(其中大部分是在 user32.dll 或 kernel32.dll 中)。事实上,Windows API 中的一些函数只是围绕系统调用的精简包装器,其中实际工作是在内核本身中完成的。
此外,正如 ocdecio 所说,假设 C 标准库的某些部分是使用 Windows API 实现的,这是完全合理的。对于某些情况,例如字符串操作,反之亦然。
编辑:由于哪些dll是根据其他dll实现的,因此受到了质疑,我已经与Dependancy Walker进行了核对,这是我的发现:
kernel32.dll depends on:
ntdll.dll
user32.dll depends on:
gdi32.dll
kernel32
ntdll.dll
advapi.dll
msimg32.dll
powerprof.dll (this dll references msvcrt.dll for some string functions)
winsta.dll
msvcrt.dll depends on:
kernel32.dll (yes it does have imports for CreateFileA)
ntdll.dll
基于此,我相信 msvcrt 是建立在 win32 API 之上的。
评论
简而言之:Windows API 包含专门为 Windows 定义的所有函数。C 运行时库包含标准 C 所需的所有函数。
实现这些功能的物理库可以是单个文件(库),也可以拆分为两个单独的库或拆分为多个库,具体取决于操作系统和您使用的实际 API/服务。
例如,在创建文件时,C 标准包括以下功能:
fopen
打开和创建文件等,而 Win32 API(例如)定义了以下功能:
CreateFile
创建和操作文件。第一个库在标准 C 运行时库可用的地方可用,而第二个库仅在支持 Win32 API 的 Windows 计算机上可用。
Win32 是与 CRT 完全不同的野兽。
CRT 是使用 C 或 C++ 函数/特性(如 printf 或 cout)时需要链接到项目中的东西。
Win32 是一组库,在使用 Windows 功能(如 GetWindowText)时需要链接到项目中。
它们是什么:
- Windows API 是由 Microsoft Windows[TM] 操作系统导出的 API
- C 运行时库是编译器供应商随 C 编译器一起提供的“标准库”,可在编译器面向的任何/任何操作系统(例如 Unix)上使用
他们的关系是什么:
- 它们是不同的,但都同样适用于在 Windows 上运行的 C++ 应用程序
- 在 Windows 上,C 标准库是通过调用基础 Windows API(分配内存、打开文件等)来实现的。
Unix 系统调用类似于 Windows API。
评论
C 运行时库基于 Windows API
评论