Win - 程序是怎样跑起来的——应用和硬件无关?

在用C语言等高级编程语言开发的Windows应用中,大家很少能接触到直接控制硬件的指令。这是因为硬件的控制是由Windows全权负责的。

不过,Windows提供了通过应用来间接控制硬件的方法。利用操作系统提供的系统调用功能就可以实现对硬件的控制。在Windows中,系统调用称为API(图11-1)。各API就是应用调用的函数。这些函数的实体被存储在DLL文件中。

Win - 程序是怎样跑起来的——应用和硬件无关?

图11-1 应用通过操作系统间接控制硬件

下面让我们来看一个利用系统调用来间接控制硬件的示例。例如,假设要在窗口中显示字符串,就可以使用Windows API中的TextOut函数①。TextOut的语法如代码清单11-1所示。在这段代码中,确实没有能让大家意识到硬件的参数。带有“设备描述表的句柄”这一注释的参数hdc,是用来指定字符串及图形等绘制对象的识别值,表示的也不是直接硬件设备。

代码清单11-1 TextOut函数的语法(C语言)

    BOOL TextOut(
      HDC hdc,              //设备描述表的句柄
      int nXStart,          //显示字符串的x坐标
      int nYStart,          //显示字符串的y坐标
      LPCTSTR lpString,     //指向字符串的指针
      int cbString          //字符串的文字数
    );

那么,在处理TextOut函数的内容时,Windows做了什么呢?从结果来看,Windows直接控制了作为硬件的显示器。但Windows本身也是软件,由此可见,Windows应该向CPU传递了某些指令,从而通过软件控制了硬件。

Ps:注脚

① 在向窗口和打印机输出字符串时,可以使用Windows提供的TextOut函数作为API。C语言提供的printf函数,是用来在命令提示符中显示字符串的函数。使用printf函数,是无法向窗口和打印机输出字符串的。