Ich begegne häufig einigen Definitionen für Win32API-Strukturen (aber nicht darauf beschränkt), die wie im folgenden Beispiel ein cbSize
-Member haben.
Und dann benutzen wir es so:
%Vor%oder
%Vor% Meine erste Vermutung ist, dass dies möglicherweise für die Versionierung verwendet werden könnte. Eine DLL, die einen Zeiger für eine solche Struktur empfängt, kann überprüfen, ob das cbSize
-Member den erwarteten Wert hat, mit dem die DLL kompiliert wurde. Oder um zu überprüfen, ob die Struktur richtig verpackt ist. Aber ich würde gerne von dir her kommen.
Was ist der Zweck des Elements cbSize
in einigen C ++ - Strukturen auf Win32API?
Meine erste Vermutung ist, dass dies könnte möglicherweise für die Versionierung verwendet werden.
Das ist ein Grund. Ich denke, es ist der üblichere.
Ein anderes ist für Strukturen mit Daten variabler Länge.
Ich denke nicht, dass das Überprüfen auf korrektes Packen oder Fehler im Aufrufer eine bestimmte Begründung dafür ist, aber es hätte diesen Effekt.
Es wird für die Versionierung verwendet. Ein gutes Beispiel ist der Aufruf GetVersionEx . Sie können entweder eine OSVERSIONINFO oder OSVERSIONINFOEX . Das OSVERSIONINFOEX ist eine Obermenge von OSVERSIONINFO, und die einzige Möglichkeit, die das OS weiß, die Sie übergeben haben, ist von dem Member DwOSVersionInfoSize.
Außerdem kann die WIN32-API eine minimale Überprüfung der Integrität der übertragenen Daten durchführen.
Ein Commom-Fehler ist beispielsweise, dass eine WIN32 -Struktur mit einem falschen oder nicht initialisierten cbSize In diesem Fall gibt die WIN32-API normalerweise nur ein fehlerhaftes Ergebnis zurück, anstatt zu versuchen, scheinbar beschädigte Daten zu verarbeiten.