打开Visual Studio 2005,创建一个Win32 应用程序,选择空项目,点击完成。
添加一个C++源码文件,键入代码。
#include<windows.h> int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, PSTR szCmdLine,int iCmdShow) { MessageBox(NULL,TEXT("Hello,Windows 7!"),TEXT("HelloMsg"),0); return 0; }
(1)windows.h
windows.h是最重要的包含文件,其包括了其他windows头文件,其中某些头文件又包含其他头文件。其中最重要的也是最基础的头文件有:
windef.h 包含基本数据类型定义
winnt.h 包含支持Unicode的类型定义
winbase.h 包含内核函数
winuser.h 包含用户界面函数
wingdi 包含图形设备接口函数
(2)程序入口
);
定义在winbase.h 文件中,第一个参数是实例句柄,是一个数值用来唯一标识程序。第二个参通常是NULL,在32位Windows系统中不再采用。第三个参数是运行程序的命令行。第四个参数用来指明程序最初如何显示,最大化或最小等。
(3)运行时
用微软的依赖查看工具depends walker 打开编译生成的执行文件
可以看到win-hello的运行依赖的动态链接库。
Windows的工作原理的中心思想就是动态链接概念。Windows 自带大量函数都在动态链接库中实现,这些文件有些后缀是.dll,有些是.exe,而其中有三个主要的子系统:
内核(kernel),用户(user)以及GDI。内核部分主要处理内存管理,文件输入输出以及人物管理等。用户部分主要是负责所有的窗口管理。GDI就是图形设备接口,负责打屏幕或打印机上显示文本与图形。
编译程序后,在链接Windows程序以生成可执行文件时,会链接编程环境所提供的import library(导入库)。导入库包含所有Windows函数调用需要的动态链接库名字及引用信息。链接程序利用这些信息构建EXE文件中的表格,当装入程序时,Windows靠这些表格来解析函数调用。
在应用程序运行时,通过一个叫做”dynamic linking“(动态链接)的进程与Windows接口。利用导入库生产的表格信息(即,PE格式中的一个字段),程序运行时就能够找到入口地址。如果被调用的函数动态链接库文件不在内存,那么就需要装入内存。