mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-26 23:37:33 +00:00
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:
@@ -792,7 +792,15 @@ begin
|
||||
Result := False;
|
||||
for i := 0 to High(OPUS_LIBS) do
|
||||
begin
|
||||
// ★Здесь LoadLibrary — НЕ тот, что в остальных наших загрузчиках: юнит
|
||||
// Windows (подключён ради WinSock2) перекрывает dynlibs своим WinAPI, а он
|
||||
// берёт PChar, и AnsiString ему не подходит. Раньше это не всплывало —
|
||||
// передавалась строковая КОНСТАНТА, она приводится сама.
|
||||
{$IFDEF WINDOWS}
|
||||
FOpusLib := LoadLibrary(PChar(OPUS_LIBS[i]));
|
||||
{$ELSE}
|
||||
FOpusLib := LoadLibrary(OPUS_LIBS[i]);
|
||||
{$ENDIF}
|
||||
if FOpusLib <> 0 then Break;
|
||||
end;
|
||||
if FOpusLib = 0 then Exit;
|
||||
|
||||
Reference in New Issue
Block a user