Windows API和C运行时库之间的关系是什么?

Mai*_*nID 3 c winapi

Windows API和C运行时库之间的关系是什么?

Jas*_*oco 7

简而言之:Windows API包含专门为Windows定义的所有功能.C运行时库包含标准C所需的所有函数.

实现这些功能的物理库可以是单个文件(库),可以拆分为两个单独的库,也可以拆分为多个库,具体取决于操作系统和您使用的实际API /服务.

例如,在创建文件时,C标准包括以下功能:

fopen

打开和创建文件等,而Win32 API(例如)定义如下函数:

CreateFile

创建和操作文件.第一个将在标准C运行时库可用的任何地方可用,而第二个只在支持Win32 API的Windows机器上可用.


Eva*_*ran 5

如果您指的是标准 C 库(我假设是 msvcrt.dll)。然后一点也不多。大多数 Windows API 是在单独的 dll 中实现的(其中大部分在 user32.dll 或 kernel32.dll 中)。事实上,Windows API 中的一些函数只是系统调用的薄包装,实际工作在内核本身中完成。

此外,正如ocdecio所说,假设 C 标准库的某些部分是使用 Windows API 实现的,这是完全合理的。对于某些情况,如字符串操作,反之亦然。

编辑:由于哪些 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
Run Code Online (Sandbox Code Playgroud)

基于此,我相信 msvcrt 是建立在 win32 API 之上的。

  • 无需假设任何事情。CRT 源代码包含在 Visual C++ 中,是的,它使用 Win32 API 调用。 (2认同)