精通Windows_API学习笔记

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

精通Windows_API学习笔记
第一章Wind ows应用程序开发入门
1.#pragma comment 什么意思及作用?
作用:这行代码指明将源文件编译成目标文件(.obj)后,将目标文件链接成可执行文件的过程中需要使用到User32.lib。

如果在链接程序中,调用链接器的参数指明了链接时需要使用到的User32.lib,这一种程序代码可以省略。

2.更新SDK版本方法
在环境变量中,设置SDK的值。

设置方式
3. 解决方案
解决方案是指若干工程的集合。

一般大型的应用程序,都不是一个可执行文件构成的,可能包括一个exe文件、若干个dll文件等。

一个解决方案下可能有零个至多个工程,每个工程可以生成一个可执行文件。

4. 使用makefile 编译程序
将makefile文件和start.c文件放在同一个目录下。

在开始菜单“Visual Studio Tools”目录下找到“Visual Studio 2005\2008命令提示”(Command Prompt)并运行。

切换到上述两个文件所在的目录,运行,nmake.exe
第二章Wind ows API概要
1.Windows数据类型
最常用的有DWORD,HANDLE,LPTSTR,WORD,BYTE,CHAR等。

HANDLE类型的变量用于唯一标识一个对象。

LPSTR类型的数据是字符串,也是字符指针;CHAR是字符;
DWORD是32位的无符号整数;
这些Windows数据类型都是从标准C数据类型经过类型重定义而来。

BOOL 布尔型变量,值只能是true或false
BYTE 字节类型,8位
CHAR 8比特字节,ANSI
CONST 常量,相当于标准C中的const关键字
DWORD 32字节无符号整型数据
DWORD32 32字节无符号整型数据
DWORD64 64字节无符号整型数据
FLOAT 浮点数据类型
HANDLE 对象的句柄,最基本的句柄类型
HICON 图标的句柄
HINSTANCE 程序实例的句柄
HKEY 注册表键的句柄
HMODULE 模块的句柄
HWND 窗口的句柄
INT 32位符号整型数据类型
INT_PTR 指向INT类型数据的指针类型
INT32 32位符号整型
INT64 64位符号整型
LONG 32位符号整型,相当于C语言的标准数据类型long
LONGLONG 64位符号整型
LONG32 32位符号整型
LONG64 64位符号整型
LPARAM 消息的L参数
WPARAM 消息的W参数
LPCSTR Windows,ANSI,字符串常量
LPCTSTR 根据环境配置,如果定义了UNICODE宏,则是LPCWSTR类型,否则是LPCSTR 类型
LPCWSTR UNICODE字符串常量
LPDWORD 指向DWORD类型数据的指针
LPSTR Window,ANSI,字符串变量
LPTSTR 根据环境配置,如果定义了UNICODE,则是LPWSTR类型,否则是LPSTR类型LPWSTR UNICODE字符串变量
SHORT 无符号短整型,16位
SIZE_T 表示内存大小,以字节为单位,其最大值是CPU最大寻址范围
TCHAR 如果定义了UNICODE,则为WCHAR,否则为CHAR
UCHAR 无符号CAHR
UNIT 无符号INT
ULONG 无符号LONG
VOID 无类型,相当于标准C语言的Void
WCHAR 16位Unicode字符
WINAPI Windows API的函数类型调用方式,常见于SDK头文件中对API函数的声明中,相当于_stdcall,更严格地说,这不是数据类型,而是一种函数调用约定。

WORD 16位无符号整型数据
2.Unicode和ASIN
Unicode是世界通用的字符编码标准,使用16位数据表示一个字符,一共可以表示65535种字符。

ASNI字符集,使用8位数据或将相邻的两个8位的数据组合在一起表示特殊的语言字符。

如果一个字节是负数,则将其后续的一个字节组合在一起表示一个字符。

这种编码方式的字符集也称作“多字节”字符集。

第三章开发工具配置与使用
1.编译链接重要作用文件
VC/bin:c1.exe 、link.exe 、lib.exe、rc.exe
VC/Include:stdlib.h、stdio.h
VC/lib:
c1.exe:文件时Visual C\C++的编译器,它将程序源代码文件编译为obj文件。

rc.exe:文件时资源编译器。

工程项目中的.rc文件中包含了对程序中所使用资源,菜单和图标等的描述。

Rc.exe将.rc格式的文件编译为.res文件,供链接器链接到可执行文件中。

Link.exe:是Windows平台的链接器,它将c1.exe编译生成的obj文件,资源编译器生成的.res 文件,以及lib目录下的lib文件等链接成可执行的exe文件、dll文件等。

2.编译选项
【1】常规
【2】与程序优化有关的编译选项
【3】与预处理有关
【5】与语言相关
【7】与输出文件有关
【8】
【9】
是将对象文件和库链接起来以创建可执行程序文件或动态链接库文件的工具。

输入文件包括obj文件、lib文件、exp文件、def文件、res文件、txt文件/ilk文件;
第四章文件系统
1.磁盘分区
磁盘时装到计算机上的存储设备,比如常见的硬盘。

磁盘分区是为了便于管理和使用物理硬盘,而在一个物理硬盘上划分可以各自独立工作的一些逻辑磁盘,比如一块80G的硬盘可以划分为4个20G的分区来使用,对操作系统来说这4个20GB的分区是4块独立的逻辑硬盘。

2.卷
卷,也称为逻辑驱动器,是NTFS、FAT32等文件系统组织结构的最高层。

卷是存储设置(如硬盘)上由文件系统管理的一块区域,是在逻辑上相互隔离的存储单元。

一个磁盘分区至少含有一个卷,卷也可以存在于多个磁盘分区上,仅存在于一个磁盘分区上的卷称“简单卷”,仅存在多个磁盘分区上的卷称为“多分区卷”或“跨区卷”。

在最常见的情况下,一个分区只包含一个卷,一个卷也只存在于一个分区上,所以两者容易混淆。

卷存在卷标,程序可以通过卷标访问卷。

第五章内存管理
1.内存
内存主要存储程序运行时所需的机器代码、数据等内容。

2.Windows内存管理原理
数据是存储于内存中的,为了能够找到存在于内存中的数据,开发人员需要知道数据所在的内存地址。

内存的最小存储单元是字节,内存中的每一个字节都有一个地址。

在32位系统上,使用32位的数来表示内存地址,因此一共可以表达232个字节。

3.地址空间
系统中所有可用的内存地址的集合称为地址空间,比如,如果可以使用4GB的内存,那么地址空间就是0x00000000~0xFFFFFFF。


4.物理内存
硬盘系统中真实存在的存储空间称为物理内存,物理内存的访问通过硬件系统总线进行的。

但是不是每一台32位的机器都具有4GB的物理地址空间,因此物理地址空间不一定是0x00000000~0xFFFFFFFF,比如在物理内存未1GB的系统上,就可能只有0x00000000~0x3FFFFFFF的地址可以使用。

5.虚拟地址空间
为了访问内存的统一和方便,操作系统允许其上运行的程序访问所有的4GB的内存空间中的地址。

因此操作系统必须进行一些必要的地址转换工作,将程序访问的地址转换为物理内存中的真实物理地址,然后进行数据的存取。

操作系统进行转换后,供程序使用的地址空间称为虚拟地址空间。

在32位系统上,可以使用的虚拟地址空间大小是4GB。

当然由于虚拟地址空间可能比真实物理地址空间大,系统会将部分虚拟地址空间中的地址转换为硬盘的数据,在必要时将物理内存中的数据与硬盘中的数据进行交换。

这种地址转换和数据交换是通过分页和分段机制实现的。

6.进程的内存空间:用户内存空间与内核内存空间
Windows操作系统中的每个进程都有属于自己虚拟地址空间。

32位的Window操作系统将4GB(64位系统上,这个值达到了8TB)的虚拟内存划分为两部分,进程使用2GB,称为用户进程空间,内核使用2GB,称为系统地址空间或内核地址空间(也可3:1)用户空间的地址范围为0x00000000~0x7FFFFFFF,内核空间的地址范围为0x80000000~0xFFFFFFF。

虚拟地址空间在进程上时封闭的,进程只能访问属于自己的地址空间,如果要访问其他进程的地址空间需要特殊的机制。

分段与分页内存管理
物理地址与虚拟地址、虚拟地址空间
虚拟内存布局,内存的分工,堆与栈
内存的存取权限
标准C内存管理函数与Windows内存管理API的关系。

相关文档
最新文档