当前位置: 首页 > news >正文

什么是Windows API

Windows 工作原理的中心思想就是“动态链接”概念。Windows 自身带有一大套函数,应用程序就是通过调用这些函数来实现它的用户界面在屏幕上显示文本和图形的。这些函数都是在动态链接库里实现的。这些文件的名称都带有后缀 .dll,或有时带有 .exe。

Windows 的 3 个主要子系统:内核(kernel),用户(user),GDI。

内核 负责操作系统的传统工作:如 内存管理,文件输入/输出 以及任务管理等。

用户 指的是用户界面,负责所有的窗口管理

GDI 就是图形设备接口,负责在屏幕或打印机上显示文本与图形

在 Windows 程序中,调用 Windows 函数与调用 C 语言的库函数没有什么两样。

最主要的区别就是 C 语言库函数的机器代码会直接链接到你的程序代码中去,而 Windows 函数则是放到你的程序之外的 DLL 里

Windows 程序运行时,它通过一个叫“动态链接”的进程与 Windows 接口。

每个 Windows 的 EXE 文件包含它所要用到的各个动态链接库以及库中的函数的引用地址

当一个 Windows 程序被装入内存后,程序中的函数调用都被解析 DLL 函数入口的指针,同时这些被调用的函数也被装入内存。

当链接 Windows 程序以生存可执行文件时,一定得链接你的编程环境所提供的特殊的“导入库”。

这些导入库包含所有 Windows 函数调用要碰到的动态链接库的名字及引用信息。链接程序利用这些信息构建 EXE 文件中的表格,当装入程序的时候,Windows 要靠这些表格来解析 Windows 函数调用。

另外值得提醒的一点是,MFC 是对 API 的封装,隐藏了许多复杂的情节。

API(应用编程接口)是程序与处理器接口的命令集。最常用的就是在外部调用微软WINDOWS内部的进程。WINDOWS API包括成千的你可以使用的函数、结构、常量。这些函数是用C语言写的,在使用他们之前,你必须声明。定义Dll的进程将相当的复杂,甚至比VB还复杂。你可以使用API Viewer工具得到API函数的声明

大部分的高级语言都支持API,微软函数类库(MFC)封装了大部分的Win32 API。ODBC API对提高数据库的操作速度大有好处。使用API,可以请求更底层的系统服务。API从简单的对话框到复杂的加密运算都提供支持。开发者应该知道如何在他们程序中使用API

每种操作系统都有一套公用API和专有API。比如:Windows NT 支持MS-DOS, Win16, Win32, POSIX (便携式操作系统接口),OS/2 console API ;同时Windows 95 supports MS-DOS, Win16 和Win32 API。

Win16 和 Win32 API:

WIN16 是基于16位的处理器,并使用16位的值,它是一个独立的平台。比如:你可以运行TSR 程序在MS-DOS环境下。

WIN32 是基于32位的处理器,并使用32位的值。他可用于任何操作系统,它的使用范围更广。

Win32 API的DLL一般都具有32的后缀,比如:KERNEL32, USER32等。

所有的API都在下面3个DLL中实现的。

Kernel

User

GDI

1. KERNEL

它的库名是:KERNEL32.DLL,它是操作系统管理的API集

Process loading. 加载进程

Context switching.

File I/O. 文件操作

Memory management. 内存管理

比如:GlobalMemoryStatus 函数获得目前系统物理虚拟内存的使用信息。

2. USER

在WIN32下,它的库名是 USER32.DLL

它管理全部的用户界面,比如:

Windows 窗口

Menus 菜单

Dialog Boxes 对话框

Icons etc., 图标等

比如:DrawIcon 画一个图标在指定的设备上。

3. GDI (Graphical Device Interface)

这个DLL是GDI32.dll,它负责图像的输出,使用GDI绘出窗口,菜单,对话框

It can create Graphical Output. 输出图像

比如:CreateBitmap 函数创建一个指定宽度、高度和颜色格式的位图。

相关文章:

  • c++类与对象用多文件编写以及vs的操作步骤
  • DUMPBIN工具的使用
  • DLL的创建和使用(含代码)
  • _T() 函数
  • DirectUI
  • 托管与非托管
  • 什么是回调函数?
  • ShowWindow与UpdateWindow
  • VS2015无法打开源文件#include “iostream.h“的解决方法
  • BHO
  • 开放平台
  • js(=>) 箭头函数
  • JavaScript中的回调函数(callback)
  • com教程(使用VS2015编写ATL示例)
  • 控制台console使用MFC库函数,Cout输出CString的方法
  • 《Java编程思想》读书笔记-对象导论
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 2017 前端面试准备 - 收藏集 - 掘金
  • CSS中外联样式表代表的含义
  • gitlab-ci配置详解(一)
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • java第三方包学习之lombok
  • java概述
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • rc-form之最单纯情况
  • vue--为什么data属性必须是一个函数
  • Zepto.js源码学习之二
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 复习Javascript专题(四):js中的深浅拷贝
  • 给初学者:JavaScript 中数组操作注意点
  • 构建二叉树进行数值数组的去重及优化
  • 构建工具 - 收藏集 - 掘金
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 如何胜任知名企业的商业数据分析师?
  • 怎样选择前端框架
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​用户画像从0到100的构建思路
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • #1015 : KMP算法
  • #Linux(权限管理)
  • (1)(1.13) SiK无线电高级配置(五)
  • (C)一些题4
  • (Python第六天)文件处理
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (附源码)计算机毕业设计高校学生选课系统
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (九十四)函数和二维数组
  • (全注解开发)学习Spring-MVC的第三天
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (一)RocketMQ初步认识