在 的文档中SetClassLongPtr
,它说设置GCL_CBCLSEXTRA
“不会更改已分配的额外字节数”。
那么,是SetClassLongPtr(..., GCL_CBCLSEXTRA, ...)
用来做什么的呢?
在 的文档中SetClassLongPtr
,它说设置GCL_CBCLSEXTRA
“不会更改已分配的额外字节数”。
那么,是SetClassLongPtr(..., GCL_CBCLSEXTRA, ...)
用来做什么的呢?
正如 Cody Gray 在他/她的评论中所说,作为对 OP 问题和评论的回应,GCL_CBCLSEXTRA
应仅用于GetClassLongPtr
功能调用。
根本没有理由,而且GCL_CBCLSEXTRA
在任何SetClassLongPtr
函数调用中使用它也可能是错误的。
假设有一个struct
其第一个字段/成员p
将缓冲区的地址存储为类型指针,void*
第二个字段/成员存储size
为整数类型size_t
,该整数类型是指向的缓冲区大小(p
以字节为单位)。
调用SetClassLongPtr
with 与GCL_CBCLSEXTRA
修改size
字段 / 成员struct
而不修改字段 / 成员p
以及struct
不重新分配函数一样错误realloc
,例如,函数的字段 / 成员指向的p
缓冲区struct
。
在 C 中,您访问size
字段/成员的struct
唯一目的是获取它的值,除非或直到p
字段/成员指向的缓冲区struct
已被重新分配,realloc
例如通过调用函数,然后才修改size
字段/成员的struct
更新。
由于调用SetClassLongPtr
withGCL_CBCLSEXTRA
是错误的,如果设置为,函数SetClassLongPtr
可能总是失败,以防止函数while成功并进行修改时可能发生的应用程序崩溃。nIndex
GCL_CBCLSEXTRA
SetClassLongPtr
nIndex=GCL_CBCLSEXTRA
自 Windows 2000 Pro 以来, GCL_CBCLSEXTRA 是GetClassLongPtr的有效标志。
它检索有关用于存储额外信息的 Windows 类内存大小的信息。换句话说:它是在用于注册窗口类的窗口类结构之后分配的以字节为单位的内存大小。