不要被各种专业术语吓倒

有一个东西,是如此奇妙,今天我们需要讲讲。

在不同的函数中,这个东西有着不同的名字,但实际它都是同一个东西。

例如,
RegisterWaitForSingleObject 这个 API,它的原型如下:
BOOL
RegisterWaitForSingleObject(
[out] PHANDLE phNewWaitObject,
[in] HANDLE hObject,
[in] WAITORTIMERCALLBACK Callback,
[in, optional] PVOID Context,
[in] ULONG dwMilliseconds,
[in] ULONG dwFlags
);
请先看其中的 Context 参数,猜猜它是做什么的。

再来看看 SetWindowSubclass 的函数原型:
BOOL SetWindowSubclass(
[in] HWND hWnd,
[in] SUBCLASSPROC pfnSubclass,
[in] UINT_PTR uIdSubclass,
[in] DWORD_PTR dwRefData
);
看看其中的 dwRefData 这个参数。

再来看看 EnumWindows:
BOOL EnumWindows(
[in] WNDENUMPROC lpEnumFunc,
[in] LPARAM lParam
);
其中有一个 lParam 参数。

最后是 CreateThread,也有一个类似的 lpParameter 参数。
HANDLE CreateThread(
[in, optional] LPSECURITY_ATTRIBUTES lpThreadAttributes,
[in] SIZE_T dwStackSize,
[in] LPTHREAD_START_ROUTINE lpStartAddress,
[in, optional] __drv_aliasesMem LPVOID lpParameter,
[in] DWORD dwCreationFlags,
[out, optional] LPDWORD lpThreadId
);

以上这些参数,你是否感觉,冥冥之中,它们都是同样的东西?

你的感觉是对的。

它们确实是同样的一个东西,即函数将会原封不动的传递给你的东西,至于它的值是什么,函数本身并不关心,它只是将参数的值传递给你(调用者)。
调用者负责解释参数值的意义。

如果需要传递比单个指针更多的上下文,该怎么办?如果你想传递,比如说,两个指针怎么办?然后将两个指针放在一个结构中,并将指针传递到该结构。

执行此操作时,会引入生存期问题,因此请确保您有一个计划来决定谁负责在不再需要内存时释放内存。

你可能会问了:”为什么 MSDN中 没有这方面详细的描述呢? 否则,调用 CreateThread 的用户将不知道该参数需要是指向此结构的指针,并且线程过程需要释放内存。”

MSDN 中没有与之相关的描述,因为 MSDN 并不关心。这完全是程序中的约定。你有责任确保调用 CreateThread 的代码和线程过程就线程参数的含义以及应如何管理它达成一致。

总结

所以,亲爱的开发者,不要被 MSDN 中各种你没有见过的名称术语吓倒,当你深入了解了事物的本质,就会明白这些这是台面上的东西,没有什么可以畏惧的。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Some call it context, others call it reference data, but whatever it is, it’s yours》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/229362.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第15关 K8s HPA:自动水平伸缩Pod,实现弹性扩展和资源优化

------> 课程视频同步分享在今日头条和B站 大家好,我是博哥爱运维,这节课带来k8s的HPA 自动水平伸缩pod( 视频后面有彩蛋 : ) )。 我们知道,初始Pod的数量是可以设置的,同时业务也分流量高峰和低峰&a…

Redis实战命令

实战命令 单值缓存 set key value get key 对象缓存 (1)set user:1 value(json格式) (2)mset user:1:name junfeng user:1:age 18 mget user:1:name user:1:age 分布式锁 分布式锁解决了什么问题? 分布式锁解…

nodejs+vue+elementui图书馆教室自习室座位预约管理系统93c8r

本系统利用nodejsVue技术进行开发自习室预约管理系统是未来的趋势。该系统使用的编程语言是nodejs,数据库采用的是MySQL数据库,基本完成了系统设定的目标,建立起了一个较为完整的系统。建立的自习室预约管理系统用户使用浏览器就可以对其进行…

SpringBoot : ch10 整合Elasticsearch

前言 欢迎阅读本文,本文将介绍如何在Spring Boot应用程序中整合Elasticsearch。随着信息量的不断增加,对数据的高效管理和检索变得尤为重要。Elasticsearch作为一个强大的开源搜索和分析引擎,为我们提供了一个灵活且高效的解决方案。 在本文…

泛微 E-Office sample权限绕过+文件上传组合漏洞Getshell

0x01 产品简介 泛微E-Office是一款标准化的协同 OA 办公软件,泛微协同办公产品系列成员之一,实行通用化产品设计,充分贴合企业管理需求,本着简洁易用、高效智能的原则,为企业快速打造移动化、无纸化、数字化的办公平台。 0x02 漏…

c++|类与对象(中)

目录 一、类的6个默认成员函数 二、构造函数 2.1概念 2.2七大特性 三、析构函数 3.1概念 3.2特性 四、拷贝构造函数 4.1概念 4.2特性 五、赋值运算符重载 5.1运算符重载 5.2赋值运算符重载 5.3前置和后置重载 六、const成员函数 七、取地址及const取地址操作符重…

详解Object.defineProperty()方法

Object.defineProperty是一个用于定义或修改对象属性的方法。它提供了一种更底层和灵活的方式来定义属性,可以设置属性的配置(如可枚举性、可配置性、可写性等),并且可以定义属性的getter和setter函数。 语法: Objec…

【开题报告】基于卷积神经网络的图像脑部MRI图像分割

论文题目 基于卷积神经网络的图像脑部MRI图像分割 一、选题意义 1.课题研究的目的和意义 1.1选题目的 脑部疾病是高致残致死率的疾病之一,对人们的生活质量和生命安全都有着十分重大的影响,所以各个国家都开始对脑部疾病的研究重视起来。帕金森、脑胶质…

SEO工具-免费功能最全的5款SEO工具

随着互联网的蓬勃发展,搜索引擎优化(SEO)已经成为许多企业和个人网站必备的关键技能。然而,对于初学者或者运营小型网站的人来说,使用专业的SEO工具可能涉及较高的成本。在这篇文章中,我们将向您推荐五款高…

印刷企业建设数字工厂管理系统的工作内容有哪些

随着科技的不断进步,数字工厂管理系统在印刷企业中的应用越来越广泛。这种系统可以有效地整合企业内外资源,提高生产效率,降低生产成本,并为印刷企业提供更好的业务运营与管理模式。本文将从以下几个方面探讨印刷企业建设数字工厂…

Microsoft Office Exce-筛选后的公式批量复制粘贴为值 并且不乱数据

Microsoft Office Exce-利用选择性粘贴将筛选后的公式结果批量转换为值 1、写好【客单价】公式,并下拉填充 (【SKU】、【销售额】、【销售量】这三列都是常量,非公式) 2、复制客单价公式到E列 3、筛选数据, 按 Delet…

cpu飙升问题排查以及解决

1、查看内存占用排行 top -c 2、查看服务器内存使用情况 free -h 3、查看文件夹磁盘空间大小 Linux 查看各文件夹大小命令du -h --max-depth1 (1)查看文件目录一级目录磁盘空间 du -h --max-depth1 (2)查看指定文件目录 du sh home --max-depth2 4、Linux下…