0

在 的文档中SetClassLongPtr,它说设置GCL_CBCLSEXTRA“不会更改已分配的额外字节数”。

那么,是SetClassLongPtr(..., GCL_CBCLSEXTRA, ...)用来做什么的呢?

4

2 回答 2

0

正如 Cody Gray 在他/她的评论中所说,作为对 OP 问题和评论的回应,GCL_CBCLSEXTRA应仅用于GetClassLongPtr功能调用。

根本没有理由,而且GCL_CBCLSEXTRA在任何SetClassLongPtr函数调用中使用它也可能是错误的。

假设有一个struct其第一个字段/成员p将缓冲区的地址存储为类型指针,void*第二个字段/成员存储size为整数类型size_t,该整数类型是指向的缓冲区大小(p以字节为单位)。

调用SetClassLongPtrwith 与GCL_CBCLSEXTRA修改size字段 / 成员struct而不修改字段 / 成员p以及struct不重新分配函数一样错误realloc,例如,函数的字段 / 成员指向的p缓冲区struct

在 C 中,您访问size字段/成员的struct唯一目的是获取它的值,除非或直到p字段/成员指向的缓冲区struct已被重新分配,realloc例如通过调用函数,然后才修改size字段/成员的struct更新。

由于调用SetClassLongPtrwithGCL_CBCLSEXTRA是错误的,如果设置为,函数SetClassLongPtr可能总是失败,以防止函数while成功并进行修改时可能发生的应用程序崩溃。nIndexGCL_CBCLSEXTRASetClassLongPtrnIndex=GCL_CBCLSEXTRA

于 2018-07-10T12:43:45.677 回答
-1

自 Windows 2000 Pro 以来, GCL_CBCLSEXTRA 是GetClassLongPtr的有效标志

它检索有关用于存储额外信息的 Windows 类内存大小的信息。换句话说:它是在用于注册窗口类的窗口类结构之后分配的以字节为单位的内存大小。

于 2012-05-12T16:21:52.507 回答