Следующий код, используемый для компиляции с Delphi 2007:
constructor TMyFile.Create(const _Filename: string);
begin
inherited Create(Integer(INVALID_HANDLE_VALUE)));
// ...
end;
В Delphi XE происходит сбой с ошибкой
E1012: Выражение константы нарушает границы поддиапазона.
Причиной является объявление THandleStream.Create:
Delphi 2007:
constructor THandleStream.Create(AHandle: Integer);
Delphi XE2:
constructor THandleStream.Create(AHandle: THandle);
с
type
THandle = NativeUInt;
Если я поменяю его на
constructor TMyFile.Create(const _Filename: string);
begin
inherited Create(THandle(INVALID_HANDLE_VALUE)));
// ...
end;
Он компилируется в Delphi XE2 и Delphi 2007.
В Delphi 2007 это вызывает предупреждение «W1012: выражение константы нарушает границы поддиапазона» и вызывает ошибку времени выполнения при вызове исполняемого файла Delphi 2007.
Можно ли как-нибудь изменить код, чтобы он работал в обеих версиях Delphi, не прибегая к IFDEFS?