Je rencontre fréquemment des définitions de structures Win32API (mais pas limitées à cela) qui ont un membre cbSize
comme dans l'exemple suivant.Quel est le but du membre cbSize dans les structures Win32API?
typedef struct _TEST {
int cbSize;
// other members follow
} TEST, *PTEST;
Et puis nous l'utiliser comme ceci:
TEST t = { sizeof(TEST) };
...
ou
TEST t;
t.cbSize = sizeof(TEST);
...
Mon estimation initiale est que cela pourrait être utilisé pour versioning. Une DLL qui reçoit un pointeur pour une structure de ce type peut vérifier si le membre cbSize
a la valeur attendue avec laquelle la DLL a été compilée. Ou pour vérifier si l'emballage approprié est fait pour la structure. Mais je voudrais ici de vous.
Quel est l'objectif du membre cbSize
dans certaines structures C++ sur Win32API?
Les stucs varient également en taille entre les versions d'OS. Je viens de frapper un bug en utilisant la plate-forme sdk qui vient avec VC++ 2008. Nous ne définissions pas correctement la version du système d'exploitation et avons fini par utiliser la version Vista d'une structure - qui ne fonctionnait pas si bien sur ma boîte XP. – Aardvark