Тип Сardinal на самом деле не поддерживается

Тип Cardinal на самом деле является Integer и не поддерживает значения больше чем High(Integer).

Дело усугубляется тем, что Cardinal является как бы встроеным типом, и его невозможно переопределить например как fvtVariant.

Это может быть проблемой как при сравнении или арифметических операциях, так и при возврате значений функций типа timeGetTime или которые возвращают THandle.

Вот такой вот тестовый скрипт.

var c:Cardinal;

begin

c:=$FFFFFFFF;

ShowMessage(IntToStr(c));

end.

Если его запускать с дебагом, то он выдаст ERangeError. Если же без дебага, то тихо умрёт. До ShowMessage дело не дойдёт в любом случае.


Варианты решения

1) Сделать честный Cardinal

2) Унаследовать его от fvtVariant

3) Вообще удалить, чтобы пользователь если ему надо сам добавил на базе чего угодно.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.