开发工具和库
编译工具
- 编译器CL.EXE 将源码编译成目标代码 .obj
- 链接器LINK.EXE 将目标代码、库链接生成最终文件
- 资源编译器RC.EXE (.rc)将资源编译,最终通过链接器存入最终文件
路径:D:\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin
库文件和头文件
- Windows库
kernel32.dll - 提供了核心的API,例如进程、线程、内存管理等。
user32.d - 提供了窗口、消息等API
gdi32.dll - 绘图相关的API
路径:C:\windows\system32
- 头文件
windows.h - 所有windows头文件的集合
windef.h - windows数据类型
winbase.h - kernel32的API
wingdi.h - gdi32的API
winuserh - user32的API
winnt.h - UNICODE字符集支持
路径:D:\Windows Kits\10\Include\10.0.19041.0\um
windows.h可以说是头文件大集合,在包含头文件出错时可以依次将头文件修改为windows.h来尝试排错
写个程序
相关函数
int WINAPI WinMain(
HINSTANCE hInstance,//当前程序的实例句柄
HINSTANCE hPrevnstance,//当前程序前一个实例句柄
LPSTR lpCmdLine,//命令行参数字符串
int nCmdShow //窗囗的显示方式
)
int MessageBox(
HWND hWnd,//父窗口句柄,如果设置为 NULL,则消息框将作为独立的窗口显示
LPCTSTR IpText, //要显示在消息框中的文本内容
LPCTSTR lpCaption, //显示在标题栏中的文字
UINT uType //消息框中的按钮、图标显示类型
)//返回点击的按钮ID
这里使用Notepad++来写,通过命令行调用cl.exe的方式来编译链接
这里程序停在这里说明MessageBox是一个阻塞函数,也就是当它被执行, 可能不会立即返回
那么这个函数如何才能推出阻塞状态呢,答案是当窗口退出时
我们看下它的返回值
也就是说当我们点击不同的按钮致使它退出时,该函数会因为我们点击的按钮不同返回不同的值
那么我们就可以根据不同的返回值来进行不同的操作
RC.EXE编译器(了解即可)
编译过程
- 编写资源的文件 - .rc资源脚本文件
- 编译rc文件 - RC.EXE
- 将资源文件链接到程序中 - LINK.EXE
我们copy一个ico文件过来
然后创建一个hello.rc资源脚本文件
然后使用rc.exe编译hello.rc
.res文件和.obj文件都被统称为目标文件(中间文件)
编译完成后使用link.exe进行链接