Soweit ich es sehe machst du nix falsch. Ich arbeite derzeit auch wiedermal an einer Klasse die wir hier benutzen und zumindest bis Windows 7 (inklusive), mache ich es genauso wie du.
Mir sind aber zwei Details aufgefallen:
- Deine Funktion (GetOSVersionEx) ist nicht die API-Funktion (GetVersionEx) welche ich erwarten würde. Im zweiten Aufruf, wo es die erwartbare API-Funktion ist, ignorierst du den zurückgegebenen Wert.
- Du wertest einen Boolean (1-Byte) aus, statt wie es zumindest die API erwarten würde, einen LongBool (BOOL, i.e. 4-Byte).
Dann noch zwei Fragen:
- Was gibt SizeOf(TOSVersionInfoEx) zurück?
- Kompilierst du die Unicode-Version oder ANSI? Lt. Delphiversion würde ich Unicode vermuten.