mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 18:43:51 +00:00
fix(platform): win64-сборка падала на GetEnvironmentVariable
Модуль Windows стоит в uses ПОСЛЕ SysUtils, поэтому его трёхпараметрический GetEnvironmentVariable(PChar;PChar;DWORD) перекрывает однопараметрический из SysUtils, и три вызова в PlatformUtils падали с «wrong number of parameters». Лечение — явная квалификация SysUtils.GetEnvironmentVariable. ★Сломалось это не сейчас: unit Windows появился в uses ещё вd209697(вместе с QueryPerformanceCounter для монотонных часов), и с тех пор под win64 не собиралось вовсе — просто сборочная машина туда не заходила. GetAppCfgDir с %APPDATA% живёт сe9f4bf1и доd209697работал. Новый стенд test/platform. Кросс-RTL обычно не установлен, поэтому ветки {$IFDEF WINDOWS} и {$IFDEF DARWIN} на Linux не компилируются ВООБЩЕ, и ошибка в них всплывает только на сборочной машине. Стенд переписывает копию PlatformUtils.pas так, чтобы платформенные условия читались как свои (-dSIMWIN / -dSIMMAC), и компилирует без линковки (-Cn): системных функций тут нет, но синтаксис, типы и — главное — разрешение имён проверяются по-настоящему. Для Windows подкладывается заглушка unit Windows, объявляющая ровно те имена, которыми настоящий перекрывает SysUtils; на ней и держится вся проверка. ★Негативный контроль: на коде до правки стенд выдаёт РОВНО те же три ошибки (строки 210, 271, 273), что и сборочная машина. Чего он не делает: живых вызовов системных счётчиков — их правильность доказывает только прогон на самой платформе. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bkwwyj7xVRrqnSVEseTRfV
This commit is contained in:
+7
-3
@@ -207,7 +207,10 @@ begin
|
||||
end;
|
||||
// Бандл под LaunchServices не может передать argv, поэтому тот же
|
||||
// переключатель читается из окружения (Info.plist -> LSEnvironment).
|
||||
S := LowerCase(Trim(GetEnvironmentVariable('EWSDR_OPENGL')));
|
||||
// ★Явная квалификация: на Windows в uses стоит unit Windows, и его
|
||||
// GetEnvironmentVariable(PChar;PChar;DWORD) перекрывает однопараметрический
|
||||
// из SysUtils — сборка под win64 падала на «wrong number of parameters».
|
||||
S := LowerCase(Trim(SysUtils.GetEnvironmentVariable('EWSDR_OPENGL')));
|
||||
if (S = '1') or (S = 'true') or (S = 'yes') or (S = 'on') then
|
||||
Exit(True);
|
||||
end;
|
||||
@@ -268,9 +271,10 @@ end;
|
||||
function GetAppCfgDir: string;
|
||||
begin
|
||||
{$IFDEF WINDOWS}
|
||||
Result := GetEnvironmentVariable('APPDATA');
|
||||
// Квалификация обязательна — см. HasOpenGLSpectrumSwitch.
|
||||
Result := SysUtils.GetEnvironmentVariable('APPDATA');
|
||||
if Result = '' then
|
||||
Result := GetEnvironmentVariable('LOCALAPPDATA');
|
||||
Result := SysUtils.GetEnvironmentVariable('LOCALAPPDATA');
|
||||
if Result = '' then
|
||||
Result := ExtractFilePath(ParamStr(0));
|
||||
Result := IncludeTrailingPathDelimiter(Result) + 'ewsdr' + PathDelim;
|
||||
|
||||
Reference in New Issue
Block a user