在SetClassLongPtr
的文档中,它说设置GCL_CBCLSEXTRA
“不会改变已分配的额外字节数”。
那么SetClassLongPtr(..., GCL_CBCLSEXTRA, ...)
用于什么?
答案 0 :(得分:0)
正如科迪·格雷(Cody Gray)在对OP的问题和评论的回应中说的那样,GCL_CBCLSEXTRA
仅应在对GetClassLongPtr
函数的调用中使用。
完全没有理由,在对GCL_CBCLSEXTRA
函数的任何调用中使用SetClassLongPtr
也是错误的。
假定存在一个struct
,其第一个字段/成员p
存储缓冲区的地址作为类型void*
的指针,而第二个字段/成员size
作为指针。类型为size_t
的整数,它是p
所指向的缓冲区的大小,以字节为单位。
用SetClassLongPtr
调用GCL_CBCLSEXTRA
与修改size
的{{1}}字段/成员而不修改{的字段/成员struct
一样错误。 {1}},例如,没有使用p
函数重新分配struct
的字段/成员realloc
指向的缓冲区。
在C语言中,仅访问p
的{{1}}字段/成员以获取其值,除非或直到{{1}的struct
字段/成员指向的缓冲区例如,通过调用size
函数已经重新分配了1}},然后您才修改struct
的{{1}}字段/成员以进行更新。
由于用p
调用struct
是错误的事实,如果将realloc
设置为size
以防止如果struct
期间函数SetClassLongPtr
成功执行并进行修改,则可能会导致应用程序崩溃。
答案 1 :(得分:-1)
自Windows 2000专业版以来,GCL_CBCLSEXTRA是GetClassLongPtr的有效标记。
它检索有关用于存储额外信息的Windows类内存大小的信息。换句话说:它是用于注册窗口类的窗口类结构之后分配的内存大小。