Windows API编程01-第一个程序详解(超详细)

 2024-01-30 05:01:47  阅读 0

我们可以看到,微软函数声明的每个参数的数据类型之前都有一个参数说明符:_In_等,这些参数说明符称为参数注释。

我们只需要复制微软的常规代码就可以了。

关于评论:

参数注解用于描述函数参数的性质和类型,可以帮助开发人员更好地理解如何使用这些参数。

对应上面四个参数注解分别是 , , and , opt 表示可选(),表示该参数不能使用,或者可以设置为0或NULL(0),表中4个参数没有opt 。 注解表明该参数必须指定一个合理的值,即必须填写。

在 VS 2019 之前,函数声明和定义中不需要设置参数注释。 参数注释仅用于指导程序员正确使用函数参数。 为了更正式,我们最好把参数注释列出来,帮助大家正确使用函数参数。

5.函数参数说明

1._在_:

h 是 的第一个字母,表示当前应用程序的实例句柄。 在程序中,句柄无非是一个数值。 它用于识别程序中的某些对象。 在此代码中,实例句柄唯一标识正在运行的 exe 程序。 文档。

它在内存中的样子(随机基地址)

固定基数()

扩张:

模块

模块代表一个正在运行的.exe或.dll文件,并代表该文件中的所有代码和资源。 磁盘上的文件不是模块。 当它们被加载到内存并运行时,它们被称为模块。 另外,当应用程序调用其他动态链接库中的API时,这些.dll文件也会被加载到内存中,从而生成一些动态链接库模块。

由于模块如此之多,为了在地址空间上区分不同的模块,每个模块都通过一个唯一的模块句柄来标识。模块句柄实际上就是一个内存基地址。 系统将 .exe 或 .dll 文件加载到地址空间中的此位置。

例子:

实例的概念起源于Win16。 Win16系统中运行的不同程序的地址空间并不是完全隔离的。 可执行文件运行后形成一个模块。 当同一个可执行文件被多次加载时,该模块是通用的。 为了区分多次加载的“副本”,每个“副本”被称为一个实例,每个实例由不同的实例()值来标识。

但在Win32中,每个运行程序的地址空间是隔离的,每个实例都使用自己私有的4GB虚拟地址空间。 不存在一个模块有多个实例的问题。 即使同一个程序同时运行多次,它们通常也不会互相影响。 在Win32中,实例句柄是模块句柄,但是当模块句柄在许多API函数中使用时,使用的名称仍然是实例句柄。

随着历史的发展和进步,很多词语已经不再具有原来的含义,但我们也可以理解这是一种文化的延续。

二,

表示应用程序的前一个实例的句柄。 在Win16中,当程序的多个副本同时运行时,同一程序的所有实例共享代码和只读数据(例如菜单或对话框模板等资源),程序可以通过以下方式知道是否运行:看参数。 它的其他实例正在运行,因此您可以将一些数据从前一个实例移动到它自己的数据区域。

对于 Win32 应用程序,此参数始终为 NULL。 这是历史的遗迹。

3. _In_ LPSTR

指向应用程序命令行参数字符串的指针,不包括可执行文件名。 要获取整个命令行,您可以调用该函数。 例如D盘下有一个111.txt文件。 当我们用鼠标双击该文件时,记事本程序(.exe)将启动。 这时系统会将D:\111.txt作为命令行参数传递给记事本。 程序的功能。 记事本程序获取到文件的路径后,在窗口中显示该文件的具体内容。

扩张:

关于LPSTR,LPSTR是一种数据类型

表示以零结尾的字符串,LPSTR表示指向以零结尾的char类型字符串的指针。 LPSTR中的LP是Long(长指针),这是Win16遗留下来的概念。 在Win32中,没有长指针和短指针之分,所有指针都是32位。 零终止,有时也称为空终止、NULL 终止等。

4.

指定应用程序最初的显示方式,例如通常在任务栏上、最大化至全屏或最小化。

标签: 实例 参数 模块

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码