Winapi 是否所有在Windows上运行的应用程序都使用Windows API?

Winapi 是否所有在Windows上运行的应用程序都使用Windows API?,winapi,Winapi,我正在努力理解代码是如何工作的,不管是哪种语言。特别是考虑在Windows上运行的软件 在为Windows平台编写软件时,我的理解是否正确,即特定语言的每个内置函数都映射到Windows API中的公开函数 我想我的问题可能更一般,一种语言能在操作系统之外做任何事情吗?如果是,怎么做?这方面的例子是什么?对此有一个理论和实际的答案 实用:是的 WinAPI是所有在Windows上执行操作的API。它稳定且版本间兼容,因此您可以使用它编写任何您想要的内容,并且只要您不使用旧版本中不存在的任何API

我正在努力理解代码是如何工作的,不管是哪种语言。特别是考虑在Windows上运行的软件

在为Windows平台编写软件时,我的理解是否正确,即特定语言的每个内置函数都映射到Windows API中的公开函数


我想我的问题可能更一般,一种语言能在操作系统之外做任何事情吗?如果是,怎么做?这方面的例子是什么?

对此有一个理论和实际的答案

实用:是的

WinAPI是所有在Windows上执行操作的API。它稳定且版本间兼容,因此您可以使用它编写任何您想要的内容,并且只要您不使用旧版本中不存在的任何API,它几乎可以在任何版本的Windows上运行。没有任何其他接口可以与操作系统正常对话

任何希望在此基础上工作的语言或平台都将调用WinAPI。C库、Python等都是写的,以便它们在上面工作(通常其他语言使用C或C++库使用WiAPI)。 理论上:没有

Windows本身包括一个实际的操作系统接口,WinAPI就是建立在这个接口之上的。如果没有必要,就不会真正使用它,因为它没有真正的文档记录。它用于一些Windows组件中,这些组件需要在系统的其他部分运行之前运行,您可以构建链接到此API的应用程序。但由于它是无文件记录的,所以它不是真正合理的,可能会随时改变

还有一个问题。几个Windows组件为在WinAPI级别上完成的操作提供较低级别的服务。例如,如果愿意,您可以编写一个汇编程序并直接使用系统调用。大多数情况下,您不想这样做,因此,对于与操作系统通信的不同平台,这更多的是一个理论上的答案,而不是实际的答案。这些也可能会根据操作系统而改变

WinAPI基本上只是在NT内核上运行的一个子系统。例如,Linux的Windows子系统是另一个实现自己的系统调用的子系统,然后将其转换为Windows子系统。以前也有一个POSIX子系统


所以总的来说,这取决于你看它的层次,但实际的答案是肯定的。一切实际上都在WinAPI上运行

是的。即使应用程序立即退出,它也会使用windows调用。 所以这不仅仅是理论上的。从理论上讲,就像在实践中一样,每个Windows应用程序都使用API,因为没有其他东西可以使用


即使您试图重写即将使用的每个功能,最终也必须安装驱动程序,这也意味着您将使用API。

理论上不一定,但实际上是。这是用于在Windows中编程的API。(理论上:有一个本机NT API,它的级别较低,不在常规应用程序中使用,如果您愿意,也可以转到系统调用级别,但它并不真正有用)@SamiKuhmonen NT API和系统调用函数不是由操作系统提供的吗?这些和Windows API有什么区别?在虚拟化成为主流之前,WINE Windows Emulator是通过提供兼容的API层创建的,用于在Linux上运行Windows程序。我记得,它在简单应用程序上运行良好,但在大多数“现实世界”商业应用程序上失败,因为这些应用程序绕过了API(或者依靠未记录的功能,@AlexR在大多数真实世界的应用程序中没有未记录的功能,也没有绕过API。只是WINE只实现了一小部分功能。好吧,但Windows API、本机API和系统调用都是由操作系统提供的。从这个意义上说,在操作系统上编写的语言只是暂时的操作系统的cy对吗?语言不能做任何不映射到操作系统提供的东西的事情,对吗?@vchester这也是一个理论上的是与否:)例如,程序可以直接从操作系统请求访问硬件,但这又回到了计算机领域“你不会为了好玩而开始编写设备驱动程序并获得批准和签名。”因此,是的,对于通用应用程序,除了通过操作系统提供的服务外,无法访问计算机。任何其他内容都是一个错误和安全问题。您能否澄清您所说的程序的意思?例如,可以直接从操作系统请求访问硬件?您是说该语言中使用的此功能与此不符操作系统提供了什么?它映射到什么?