mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 17:27:32 +00:00
Модуль 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
33 lines
1.5 KiB
ObjectPascal
33 lines
1.5 KiB
ObjectPascal
unit Windows;
|
||
|
||
{
|
||
Заглушка модуля Windows для проверки WINDOWS-ветки на Linux.
|
||
|
||
Объявляет РОВНО те имена, которыми настоящий Windows перекрывает SysUtils —
|
||
само перекрытие и ловит ошибки, невидимые на Linux: unit Windows стоит в uses
|
||
ПОСЛЕ SysUtils, поэтому его трёхпараметрический GetEnvironmentVariable
|
||
выигрывает у однопараметрического из SysUtils, и вызов падает с «wrong number
|
||
of parameters». Ровно так win64-сборка и легла.
|
||
}
|
||
|
||
{$MODE Delphi}
|
||
|
||
interface
|
||
|
||
type
|
||
DWORD = LongWord;
|
||
function GetEnvironmentVariable(lpName, lpBuffer: PChar; nSize: DWORD): DWORD; stdcall;
|
||
function QueryPerformanceCounter(var lpPerformanceCount: Int64): LongBool; stdcall;
|
||
function QueryPerformanceFrequency(var lpFrequency: Int64): LongBool; stdcall;
|
||
function GetTickCount64: QWord; stdcall;
|
||
implementation
|
||
function GetEnvironmentVariable(lpName, lpBuffer: PChar; nSize: DWORD): DWORD; stdcall;
|
||
begin Result := 0; end;
|
||
function QueryPerformanceCounter(var lpPerformanceCount: Int64): LongBool; stdcall;
|
||
begin lpPerformanceCount := 123456789; Result := True; end;
|
||
function QueryPerformanceFrequency(var lpFrequency: Int64): LongBool; stdcall;
|
||
begin lpFrequency := 10000000; Result := True; end;
|
||
function GetTickCount64: QWord; stdcall;
|
||
begin Result := 42; end;
|
||
end.
|