zoukankan      html  css  js  c++  java
  • Windows API是什么?

    Win32程序是构筑在Win32 API基础上的。在Win32 API中,包括了大量的函数、结构和消息等,它不仅为应用程序所调用,也是Windows自身的一部分,Windows自身的运行也调用这些API函数。

    Windows API的来历

    ==============

    在DOS下,操作系统的功能是通过各种软中断来实现的。

    如大家都知道int 21h是DOS中断,int 13h和int 10h是BIOS中的磁盘中断和视频中断。

    当应用程序要引用系统功能时,要把相应的参数放在各个寄存器中再调用相应的中断,程序控制权转到中断中去执行,完成以后会通过iret中断返回指令回到应用程序中。

    如DOS汇编下有下列语句:

    mov     ah,9
    mov     dx,offset szHello
    int       21h

    这3条语句调用DOS系统模块中的屏幕显示功能,功能号放在ah中,9号功能表示屏幕显示,要输出到屏幕上的内容的地址放在dx中,然后去调用int 21h,字符串就会显示到屏幕上。

    这个例子说明了应用程序调用系统功能的一般过程。

    首先,系统提供功能模块并约定参数的定义方法,同时约定调用的方式,应用程序按照这个约定来调用系统功能。

    在这里,ah中放功能号9,dx中放字符串地址就是约定的参数,int 21h是约定的调用方式。

    下面来看看这种方法的不便之处。首先,所有的功能号定义是冷冰冰的数字,int 21h的说明文档是这样的:

    Int 21 Functions:

    00——Program termination

    01——Keyboard input

    02——Display output

    03——AUX input

    04——AUX output

    05——Printer output

    06——Direct console I/O

    07——Direct STDIN input, no echo

    08——Keyboard input, no echo

    09——Print string

    0A——Buffered keyboard input

    0B——Check standard input status

    再进入09号功能看使用方法:

    Print string (Func 09)

    AH = 09h

    DS:DX -> string terminated by "$"

    这就是DOS时代汇编程序员都有一厚本《中断大全》的原因,因为所有的功能编号包括使用的参数定义仅从字面上看,是看不出一点头绪来的。

    另外,80x86系列处理器能处理的中断最多只能有256个,不同的系统服务程序使用了不同的中断号,这少得可怜的中断数量就显得太少了,结果到最后是中断挂中断,大家抢来抢去的,把好好的一个系统搞得像接力赛跑一样。

    对于这些弱点,程序员们都有个愿望:系统功能如果能以功能名称作为子程序名直接调用就好了,参数也最好定义的有意义一点,这样一来写程序就会方便得多,编系统扩展模块也就不必老是担心往哪个中断上面挂了,最好能把上面int 21h/ah=9的调用写成下面这副样子:

    call PrintString,addr szHello

    终于,好消息出来了,Win32环境中的编程接口就是这个样子,这就是Windows API。

    Windows API的简介

    ===============

    Windows API 实际上是以一种新的方法代替了DOS中用软中断的方式。

    和DOS的结构相比,Win32的系统功能模块放在Windows的动态链接库(DLL)中。

    DLL是一种Windows的可执行文件,采用的是和 .exe文件同样的PE格式。

    在PE格式文件头的导出表中,以字符串形式指出了这个DLL能提供的函数列表。

    应用程序使用字符串类型的函数名指定要调用的函数。

    实际上,Win32的基础就是由DLL组成的。Win32 API的核心由3个DLL提供,它们是:

    • KERNEL32.DLL——系统服务功能。包括内存管理、任务管理和动态链接等。
    • GDI32.DLL——图形设备接口。利用VGA与DRV之类的显示设备驱动程序完成显示文本和矩形等功能。
    • USER32.DLL——用户接口服务。建立窗口和传送消息等。

    当然,Win32 API还包括其他很多函数,这些也是由DLL提供的,不同的DLL提供了不同的系统功能。如使用TCP/IP协议进行网络通信的DLL是Wsock32.dll,它所提供的API称为Socket API;专用于电话服务方面的API称为TAPI(Telephony API),包含在Tapi32.dll中。所有的这些DLL提供的函数组成了现在所用的Win32编程环境。

    摘自《Win32汇编教程》作者: 罗云彬

  • 相关阅读:
    字王20年
    [转]Birdfont 2.10 发布,字体编辑器
    vs2013编译boost库
    c++ 完成端口资料
    获取输入法输入内容及后选项的钩子
    unicode string和ansi string的转换函数及获取程序运行路径的代码
    c++实现输入法窗口自定义的代码
    在固定长方形里产生渐变
    监听某个div或其它标签的大小改变来执行相应的处理
    64位SqlServer通过链接服务器与32位oracle通讯
  • 原文地址:https://www.cnblogs.com/awpatp/p/1603273.html
Copyright © 2011-2022 走看看