Programming Windows 笔记:Getting Started (一)

本文为《Programming Windows, Fifth Edition》(Charles Petzold 著)第1章 “Getting Started” 的学习笔记总结。


动态链接(Dynamic Linking)

Windows 程序动态链接库文件时从代码到运行的完整流程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[ 源代码 .c/.cpp ]


[ 编译 Compile ]


[ 目标文件 .obj ]


[ 链接 Link ]
│ │
│ └── 使用 import library (.lib)
│ ↓
│ 提供 DLL 名 + 函数符号

[ 可执行文件 .exe ]


[ 运行时 Load ]


[ 加载 DLL (.dll) ]


[ 调用真正函数实现 ]

动态链接与静态链接对比如下:

类型 是否拷贝代码到 exe
.lib(import) ❌ 不拷贝
.lib(static) ✅ 拷贝
.dll 运行时加载

在 Windows 中,链接阶段通过 import library(.lib)解析外部符号,并记录对应的 DLL 依赖;真正的函数实现并不会被链接进 exe,而是在程序运行时由系统加载 DLL 并完成函数地址绑定。


Hello, World

1
2
3
4
5
6
7
8
#include <windows.h>

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
MessageBox (NULL, TEXT ("Hello, Windows 98!"), TEXT ("HelloMsg"), 0) ;
return 0 ;
}

WinMain 声明如下:

1
2
3
4
5
6
int WINAPI WinMain(
HINSTANCE hInstance, //处理当前实例
HINSTANCE hPrevInstance, //前一个实例的句柄
LPSTR lpCmdLine, //指向命令行的指针
INT nCmdShow //显示窗口状态
);