fix(web): win64-сборка падала на LoadLibrary с именем-строкой

В WebServer подключён юнит Windows (ради WinSock2), а он перекрывает
dynlibs.LoadLibrary своим WinAPI, который принимает PChar. Пока имя библиотеки
было строковой КОНСТАНТОЙ, приведение делал компилятор, и это не всплывало;
как только имён стало несколько и они переехали в массив AnsiString (7a8dad3),
win64-сборка легла: «Incompatible type for arg no. 1: Got "AnsiString",
expected "PChar"». У остальных наших загрузчиков (AudioOutput, IIOBindings,
DMRBindings) юнита Windows в uses нет — там тот же код собирается.

Под Windows имя приводится явно, на Unix вызов остаётся прежним.

Проверено пробником поверх заглушки юнита Windows из test/platform/win_stub
(в неё для этого добавлены сигнатуры LoadLibrary/GetProcAddress/FreeLibrary):
старая форма даёт ровно ту же ошибку, что и сборочная машина, новая
компилируется. Сам WebServer стенд пока не проверяет — для этого нужна ещё
заглушка WinSock2.
This commit is contained in:
2026-08-26 09:57:01 +03:00
parent 7a8dad33b4
commit bc534cdc5a
+8
View File
@@ -792,7 +792,15 @@ begin
Result := False; Result := False;
for i := 0 to High(OPUS_LIBS) do for i := 0 to High(OPUS_LIBS) do
begin begin
// ★Здесь LoadLibrary — НЕ тот, что в остальных наших загрузчиках: юнит
// Windows (подключён ради WinSock2) перекрывает dynlibs своим WinAPI, а он
// берёт PChar, и AnsiString ему не подходит. Раньше это не всплывало —
// передавалась строковая КОНСТАНТА, она приводится сама.
{$IFDEF WINDOWS}
FOpusLib := LoadLibrary(PChar(OPUS_LIBS[i]));
{$ELSE}
FOpusLib := LoadLibrary(OPUS_LIBS[i]); FOpusLib := LoadLibrary(OPUS_LIBS[i]);
{$ENDIF}
if FOpusLib <> 0 then Break; if FOpusLib <> 0 then Break;
end; end;
if FOpusLib = 0 then Exit; if FOpusLib = 0 then Exit;