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

时间:2009-01-08 12:53:14

标签: c winapi

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

6 个答案:

答案 0 :(得分:6)

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

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

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

fopen

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

CreateFile

创建和操作文件。第一个可用于标准C运行时库,而第二个只能在支持Win32 API的Windows机器上使用。

答案 1 :(得分:4)

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

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

编辑:由于哪些dll是以其他方式实现的,这已经成为问题,我已经检查了依赖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之上的。

答案 2 :(得分:4)

Win32与CRT完全不同。

当您使用C或C ++函数/功能(例如printf或cout)时,需要将CRT链接到项目中。

Win32是一组在使用Windows功能(如GetWindowText)时需要链接到项目中的库。

答案 3 :(得分:1)

它们是什么:

  • Windows API是Microsoft Windows [TM]操作系统
  • 导出的API
  • C运行时库是编译器供应商随C编译器提供的“标准库”,可在编译器所针对的任何/任何操作系统(例如,Unix)上使用

他们的关系是什么:

  • 它们是截然不同的,但对于在Windows上运行的C ++应用程序同样可用
  • 在Windows上,C标准库是通过调用底层Windows API(分配内存,打开文件等)来实现的。

答案 4 :(得分:0)

C运行时库基于Windows API

答案 5 :(得分:-2)

Unix系统调用与Windows API类似。