网站正能量免费下载,九八智能建站,比较好的网页模板网站,网站手机版制作推荐阅读《深入浅出#xff1a;Windows Api 程序设计》。《深入浅出#xff1a;Windows Api 程序设计》是 王端明 先生的著作#xff0c;是2022年人民邮电出版社出版的图书。 文章目录 基础知识一、Windows 特色二、编程语言三、安装软件四、Hello World 程序练习1、创建工程…推荐阅读《深入浅出Windows Api 程序设计》。《深入浅出Windows Api 程序设计》是 王端明 先生的著作是2022年人民邮电出版社出版的图书。 文章目录 基础知识一、Windows 特色二、编程语言三、安装软件四、Hello World 程序练习1、创建工程2、编写程序2.1 Windows.h2.2 入口函数 WinMain2.3 MessageBox 函数 五、程序编译1、预处理2、汇编3、编译4、链接 六、例程运行效果 基础知识
一、Windows 特色
Microsoft Windows是美国微软公司开发的一套操作系统。自1985年问世以来随着软硬件的升级Microsoft Windows不断迭代更新变得更加人性化始终备受市场青睐。 Windows操作系统主要特点是图形用户界面、多任务、一致的用户界面等。 而对程序员开发者来说Windows操作系统有以下卓越的优点
大量API函数调用支持几千种函数调用 可开发出界面精美、性能卓越的应用程序。设备无关性应用程序只需要针对设备的驱动程序进行开发而不必关注设备的具体型号。内存管理方便内存分页和虚拟内存的使用使得应用程序可用的地址空间极大。
Windows Api(应用程序编程接口Application Programming Interface简称API)允许开发者调用操作系统提供的一系列功能而不必考虑其底层的运行机制。Api函数是构建整个Windows框架的基石它的上层是所有Windows应用程序。
二、编程语言
机器语言机器指令二进制0和1描述的指令的集合。直接对硬件操作。开发者使用困难依赖机器局限性很大属于低级语言。汇编语言汇编指令英文缩写的助记符描述的指令的集合。直接对硬件操作。比较复杂、冗长但是其生成的可执行文件.exe或.dll较小且执行速度快。高级语言“高级”是相对于汇编而言的包含很多种编程语言。对开发者而言易操作学习使用简单。 不可直接被机器识别需要转换才可被执行。按转换方式分类 解释类一边翻译成机器语言一边被执行。效率较低不能生成独立的可执行文件。但较为灵活可动态调整修改应用程序代码。如pythonJavaScript等。编译类程序执行前翻译成机器语言。可脱离编程环境独立执行效率较高。但修改后需重新编译才可生成目标文件。如C、C等。
三、安装软件
按部就班安装VS就行。
四、Hello World 程序练习
1、创建工程
使用Visual Studio 2022开发实现。
左上角文件-新建-项目。筛选语言为C平台为Windows项目类型为桌面选择Windows桌面向导下一步。 Windows桌面向导 对项目命名选定项目路径创建。在应用程序类型中选择桌面应用程序.exe勾选空项目确定。 应用程序类型 默认情况下设置为Debug x8632位程序调试版本在解决方案资源管理器窗口中选中创建的项目右击添加-新建项选择C文件(.cpp)改名添加。 添加C文件 2、编写程序
#include Windows.h int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{MessageBox(NULL, TEXT(Hello World!), TEXT(Caption), MB_OKCANCEL | MB_ICONINFORMATION | MB_DEFBUTTON2);return 0;
}2.1 Windows.h
重要头文件包含 WinDef.h基本数据类型定义WinBase.hKernel内核有关定义WinGdi.h图形设备接口有关定义WinUser.h用户界面有关定义
2.2 入口函数 WinMain int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow);函数调用约定用于描述 函数参数怎么传递 和 由谁来平衡堆栈。常用的函数调用约定有_stdcall_cdecl_fastcallpascal等。 其中WinMain中的WINAPI的定义就是函数调用约定。minwindef.h中:#define CALLBACK __stdcall
#define WINAPI __stdcall
#define WINAPIV __cdecl
#define APIENTRY WINAPI
#define APIPRIVATE __stdcall
#define PASCAL __stdcall批注函数中每个参数的数据类型前的参数说明符用于说明函数参数的性质与类型。 _In_输入参数函数只可读取但不可修改该参数_Inout_输入输出参数调用前可设置数值函数返回后会修改该参数的值_Out_输出参数函数返回后会返回一个值给这个参数_Outptr_输出参数函数返回后会返回一个指针值给这个参数带有opt表示可以不使用该参数也可设置为0NULL WinMain的四个参数 HINSTANCE hInstance 表示应用程序当前实例的句柄。句柄是用于唯一标识某个对象的数值。 模块代表的是一个运行中的.exe或.dll 文件。文件中的所有代码和资源载入内存后运行时叫作模块;为了区分地址空间中的不同模块每个模块都有一个唯一的模块句柄来标识。实例多次加载同一个可执行文件时为了区分多次加载的“复制”把每个“复制”叫作实例。每个实例均用不同的实例句柄(HINSTANCE)值来标识。在 Win32 中实例句柄就是模块句柄。HINSTANCE hPrevInstance表示应用程序上一个实例的句柄。同一程序的所有实例共享代码和只读数据。查看该参数可以查看是否有其他实例在运行从而进行数据共享。对于 Win32该参数始终为NULL。LPSTR lpCmdLine指向应用程序命令行参数字符串的指针。LPSTR是一种windows数据类型表示一个以零NULL结尾的char类型字符串的指针。int nCmdShow指定应用程序最初如何显示。
2.3 MessageBox 函数
int MessageBox(_In_opt HWND hWnd, //消息框的所有者的窗口句柄_In_opt LPCTSTR lpText, //要显示的消息内容_In_opt LPCTSTR lpCaption, //消息框的标题_In_ UINT uType //消息框的图表样式和按钮样式);功能是显示一个消息提示框可以包含系统图标、按钮、消息标题、消息内容。HWND hWnd消息框的所有者的窗口句柄。句柄类型HWND——窗口句柄类型HIC0N——图标句柄类型HCURSOR——光标句柄HBRUSH——画刷句柄。LPCTSTR lpText要显示的消息内容。LPCTSTR表示指向 wchar_t 或 char 类型常量字符串的指针。LPCTSTR lpCaption消息框的标题UINT uType消息框的图表样式和按钮样式各个参数的具体数值可以参看官方目录——MessageBox 函数 (winuser.h)
五、程序编译
将一个C/C文件编译成可执行程序需要经过预处理、汇编、编译、链接等阶段。利用linux环境下的gcc编译工具可以清晰看到编译的阶段
1、预处理
.c文件转成.i文件预处理过程中的工作宏定义展开处理所有条件编译指令处理#include删除注释添加行号和文件标识。
2、汇编
.i文件转为.s文件汇编的过程检查语法错误
3、编译
.s文件转成.obj文件汇编文件转成目标文件二进制文件
4、链接
.obj文件转成.exe文件在此过程中将二进制的目标文件与用到的库绑定链接在一起
六、例程运行效果 运行结果