我经常遇到Win32API结构的一些定义(但不限于它),它们具有cbSize
以下示例中的成员.
typedef struct _TEST { int cbSize; // other members follow } TEST, *PTEST;
然后我们像这样使用它:
TEST t = { sizeof(TEST) }; ...
要么
TEST t; t.cbSize = sizeof(TEST); ...
我最初的猜测是,这可能会用于版本控制.接收类似于此结构的指针的DLL可以检查该cbSize
成员是否具有用于编译DLL的预期值.或者检查是否对结构进行了正确的包装.但是我想在这里.
cbSize
Win32API上某些C++结构中成员的目的是什么?
它用于版本控制.一个很好的例子是GetVersionEx调用.您可以传入OSVERSIONINFO或OSVERSIONINFOEX.OSVERSIONINFOEX是OSVERSIONINFO的超集,操作系统知道您传入的唯一方法是dwOSVersionInfoSize成员.
我最初的猜测是,这可能会用于版本控制.
这是一个原因.我认为这是比较常见的一个.
另一种是具有可变长度数据的结构.
我不认为在调用者中检查正确的打包或错误是其背后的特殊原因,但它会产生这种效果.