Windows API

title: 历史.
content: Windows API总会为程序员提供大量的构建不同 Windows的底层结构,这有助于为 Windows 程序员开发应用程序提供大量的灵活性和功能。但是,它同样使Windows应用程序要负责处理大量底层且有时是繁琐的与图形用户界面(GUI)相关的操作。  常用的例子程序Hello world程序,通常是用来示范一个系统上最简单的程序(即在萤幕上印出一行"Hello World")。  许多有关Windows API的畅销书的作者查尔斯·佩佐德(Charles Petzold)曾经说过:  这些年来,Windows操作系统已经今非昔比,而Windows API也随之改变和成长并反映出这种变化。Windows API的Windows 1.0版本只提供不到450个函数调用(Subroutine),而现在的版本提供上千个。然而,整体而言,Windows接口保持了相当好的一致性,古老的Windows 1.0程序对习惯于现在版本Windows API的程序员也并不陌生。  微软特别强调维持软件的向后兼容性。为了实现此一目标,有时微软甚至不惜支持使用了非官方乃至(编程上)非法的API的软件。一位致力于Windows API的Windows开发者雷蒙德·陈(Raymond Chen)曾提及:
title: Windows API分类.
content: Windows API所提供的功能可以归为七类:
title: Web相关API.
content: Internet Explorer网页浏览器也提供许多程序接口,提供以下接口:  和Windows的邮件功能相关的API,例如地址本和邮件API,在Windows 7取消邮件功能之后也随之从Windows API中去除。由于Windows Mail在Windows Vista上取代了Outlook Express,对应的API也随之变化。
title: 多媒体相关API.
content: 自从Windows 95 OSR2以来,Microsoft把DirectX API作为Windows安装的一部分。DirectX提供一组松散相关的多媒体和游戏服务,包括:
title: 程序通信API.
content: Windows API的功能主要通过使操作系统和应用程序之间的交互来实现。为了实现不同Windows应用程序的通信,微软随着主要Windows API,推出一系列的技术。最初的DDE(Dynamic Data Exchange)升级为物件连结与嵌入(Object Linking and Embedding),再后来是组件对象模型(COM)。
title: 封装库.
content: 微软利用许多更底层的Windows API函数,开发出许多封装库(wrapper),让应用程序以更抽象的方式与Windows API进行交互。MFC(Microsoft Foundation Class Library)用C++ 类别来封装Windows API的功能,因而允许用更为物件导向的方式与API进行交互。ATL(Active Template Library)是对COM的面向模板(template oriented)的封装。WTL(Windows Template Library)作为ATL的增强,被用来作为MFC的轻型的替代物。  其他著名的封装库是Borland公司的产品,为了与MFC竞争而推出的OWL(Object Windows Library)提供了类似的物件导向封装。不久Borland又推出VCL(Visual Component Library)来取而代之。  大多数的Windows 程序框架(application framework)是对Windows API的封装,因而.NET Framework、Java以及其他在Windows下的程序语言,都是(或者包含)封装库。
title: 其它实现.
content: 尽管微软的Windows API实现有版权保护,但被普遍认可的是,根据美国的法律先例,其他厂商仍然可以通过提供一致的API来模拟Windows,而不会侵犯版权。  Wine是为Unix类平台提供Win32 API相容层的尝试。ReactOS走得更远,提供了整个Windows操作系统的模拟,与Wine项目紧密结合,以便促进代码重用和兼容。HX DOS-Extender是另一个模拟Windows API的项目,允许通过DOS命令行来运行简单的Windows程序。
title: 编译器支持.
content: 为了开发使用Windows API的软件,编译器必须能处理和导入微软相关的DLLs或者COM对象。编译器必须接受一种C或C++方言,或者能够处理揭示了内部API函数名称的接口定义语言(Interface description language)文件和头文件及生成的类型库(Type Library)。概括而言,这些预备条件(编译器、开发工具、库和头文件)被统称为Microsoft Platform SDK。很长时间以来,包含了编译器和开发工具的专利产品如Microsoft Visual Studio系列和Borland编译器(尽管至少在Windows下,SDK是可以从整个IDE环境中剥离出来单独免费下载的,据Microsoft Platform SDK Update),是仅有的能提供整套开发环境的选择。如今MinGW和Cygwin也能提供一套这样的开发环境——是基于采用一种独立头文件集合来保证能与微软DLL连接的GCC。LCC-Win32是由Jacob Navia维护的一种“非商业用途免费”的C编译器。Pellesc是由Pelle Orinius维护的一种免费C编译器。MASM32是一个成熟的项目,它通过自制或由SDK平台转换的头文件和库,并利用32位微软汇编器来实现支持Windows API。  微软相关的编译器支持也是异常处理(Structured Exception Handling)特性所需要的。这个体制有双重目的:它提供了语言相关的异常处理赖以实现的基础,同时也是内核借以通知程序发生诸如解除一个非法指针的引用或堆栈溢出之类异常状况的渠道。甫一被引入Windows 95和NT,微软/Borland C++编译器就有使用这种体制的能力,然而实际实现未被公开,而且必须经过反向工程方可用于Wine项目和免费编译器。SEH的运行机制是先把异常的句柄推入堆栈,继而将它们添加到存储于线程本地资源(即线程环境块的首字段)的一个链表里。事实上,每一个未有程序本身处理的异常,都将由会弹出常规Windows崩溃对话框的默认backstop处理器处理。  API在Visual Basic中的实现示例(这个简化的例子使得用户可以让命令按钮在窗体上四处移动):

Summary: Windows操作系统应用程序接口(英语:Windows API),有非正式的简称法为WinAPI,是微软对于Windows操作系统中可用的核心应用程序编程接口的称法。它被设计为各种语言的程序调用,也是应用软件与Windows系统最直接的交互方式。大多数驱动程序需要对Windows系统更底层次访问接口,由所用版本的Windows的Native API来提供接口。

Windows API: The Windows API, informally WinAPI, is Microsoft's core set of application programming interfaces (APIs) available in the Microsoft Windows operating systems. The name Windows API collectively refers to several different platform implementations that are often referred to by their own names (for example, Win32 API); see the versions section. Almost all Windows programs interact with the Windows API. On the Windows NT line of operating systems, a small number (such as programs started early in the Windows startup process) use the Native API.