Типы фактических и формальных параметров вар должны быть идентичны
Это E2033 ошибка, described by the documentation следующим образом:
Для переменного параметра, фактический аргумент должен быть точным тип формального параметра.
Таким образом, ошибка связана с параметром var
, а BeginThread
имеет только один: конечный параметр. Код библиотеки проходит ThreadID
для этого параметра var
и ThreadID
который объявлен как:
ThreadID: THandle;
Но функция BeginThread
ожидает TThreadID
(который является псевдонимом для LongWord
) для этого параметра. Код библиотеки полностью фиктивный. Идентификатор потока категорически не является THandle
.
В старых версиях Delphi THandle
был указан неверно LongWord
. К счастью, последние версии Delphi исправить эту пародию, объявив ее NativeUInt
, хотя я лично предпочел бы, чтобы она была объявлена как нетипизированный указатель, как в заголовочных файлах Windows.
Исправить код библиотеки BeRoXM
, изменив тип ThreadID
на TThreadID
. Ожидайте, что возникнет больше проблем при переносе этого кода на XE5.
Зачем нужна вся сложность? Это действительно не так сложно. –
@ DavidHeffernan это не сложно, когда вы знаете, что такое ошибка и как ее исправить. Но когда вы этого не сделаете, вам нужно пошаговое руководство. Или что-то отлаживающее вашу программу для вас. Не связанная записка, можете ли вы отправить почту в документацию @ EMBT? они забыли декларацию Delphi по адресу http://docwiki.embarcadero.com/Libraries/XE5/en/System.TThreadFunc У меня нет моей почты здесь, можете ли вы опустить их записку –
Мы действительно знаем, что такое ошибка, и это тот, который всегда тривиально, чтобы понять –