#delphi #delphi-xe2
#delphi #delphi-xe2
Вопрос:
Я действительно не понимаю эту ошибку «несовместимые типы» (Delphi XE2)
function TWaveBase.GetHandle: THandle;
begin
if HandleNeeded then begin
if HandleAllocated then
CloseHandle;
CreateHandle(False);
end;
FHandleNeeded:=False;
Result:=FHandle;
end;
[…]
property Handle:Cardinal read GetHandle;
-> ошибка здесь
Ответ №1:
THandle
это тип, объявленный на основе Cardinal
в Delphi XE. (Из-за 64-разрядности и кроссплатформенности в XE2 это определено как NativeUInt
). Это новый тип.
Если ваш GetHandle
метод получения возвращает a THandle
, ваше свойство также должно быть объявлено как THandle
. Измените это, и все должно работать нормально.
Комментарии:
1. Итак (связано с DelphiXE2), я внес изменение для NativeUInt. Теперь у меня этот тупик, другая несовместимая ошибка типов Integer и AntiveInt, связанная с MMSystem WaveInClose. -> Метод WaveInClose возвращает system.cardinal
2. @volvox: Это вызвано ошибкой того же типа, поэтому исправление будет таким же — измените один из типов, чтобы он был совместим с другим. По возможности используйте типы XE2, потому что они будут работать в XPlatform и в 64-разрядной версии, как я упоминал выше. (И мой ответ заключался в том, чтобы внести изменения в
THandle
, а неNativeUInt
, если вы прочтете это более внимательно; это обеспечивает совместимость как в обратном направлении, так и в будущем.)3. Спасибо — я наконец-то запустил проект под управлением Delphi 2007 — слишком много библиотек не обновлены, чтобы иметь с ними дело.
4. я чувствую твою боль. я конвертирую ~ 100 Мб исходных текстов 2006-> XE2 🙂 И некоторые компоненты, такие как ToolBar97 и pascal HTMLViewer, давно мертвы.