【发布时间】:2011-11-04 13:20:03
【问题描述】:
以下代码用于使用 Delphi 2007 进行编译:
constructor TMyFile.Create(const _Filename: string);
begin
inherited Create(Integer(INVALID_HANDLE_VALUE)));
// ...
end;
在 Delphi XE 中失败并出现错误 E1012: 常量表达式违反子范围界限。
原因是THandleStream.Create的声明:
德尔福 2007:
constructor THandleStream.Create(AHandle: Integer);
德尔福 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 吗?
【问题讨论】:
-
@David,这比评论更重要;)
-
@TLama 看过旧 Delphi 版本中 THandleStream.Create 的声明后,我现在明白了这个问题。
标签: delphi delphi-2007 delphi-xe2