第一个Windows程序

打开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)程序入口

int WinAPI WinMain (
    __in HINSTANCE hInstance,
    __in_opt HINSTANCE hPrevInstance,
    __in_opt LPSTR lpCmdLine,
    __in int nShowCmd

    );

定义在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格式中的一个字段),程序运行时就能够找到入口地址。如果被调用的函数动态链接库文件不在内存,那么就需要装入内存。



你可能感兴趣的:(应用程序)