Номера версий. Они очень важны. И так много людей проверяет их неправильно.
Вот почему функция GetVersion в Windows 95 возвращала 3.95 вместо 4.0. Куча кода проверяла номер версии вот так:
Ver := GetVersion;А теперь посмотрим, что произойдёт, если номер версии будет 4.0. Проверка старшего (major) номера версии пройдёт успешно, но проверка младшего (minor) номера будет неудачной, т.к. 0 меньше 10.
MajorVersion := Ver and $FF;
MinorVersion := (Ver shr 8) and $FF;
if (MajorVersion < 3) or (MinorVersion < 10) then
raise Exception.Create('Эта программа требует Windows 3.1');
Эта ошибка была так распространена, что нам надоело исправлять каждое приложение и мы просто решили: "Ну и отлично. Если кто-нибудь спросит, мы - Windows версии 3.95".
Я подозреваю, что по этой же причине DirectX всегда говорит, что он версии 4.x.
Примечание переводчика: для избежания таких проблем в своих программах Delphi содержит функцию CheckWin32Version. Но и она не обошлась без проблем в реализации. В некоторых версиях Delphi (до 7-ки) она реализована с точностью до наоборот.
Установил себе Windows 7. В общем большинство дров и софта установилось без проблем (Windows не нашла своего драйвера для тюнера и инфракрасного порта), за исключением двух мелких тулсов, которые радостно отрапортовали: "This application requires Windows Vista or later".
ОтветитьУдалитьПроверку на "or later" видимо забыли дописать)))
ОтветитьУдалить