什么是SetClassLongPtr(GCL_CBCLSEXTRA)用于?

时间:2012-05-11 19:29:35

标签: c++ windows winapi visual-c++ setclasslong

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

那么SetClassLongPtr(..., GCL_CBCLSEXTRA, ...)用于什么?

2 个答案:

答案 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类内存大小的信息。换句话说:它是用于注册窗口类的窗口类结构之后分配的内存大小。