我正在尝试使用The Tomes of Delphi中包含的代码中的TDRecLst和TDSplyCm单元,但在TDBasics.pas中出现编译器错误:
我在TDStrRes.inc中遇到类似的错误:
出了什么问题,我该如何解决?
该代码可从作者处获得。
我正在尝试使用The Tomes of Delphi中包含的代码中的TDRecLst和TDSplyCm单元,但在TDBasics.pas中出现编译器错误:
我在TDStrRes.inc中遇到类似的错误:
出了什么问题,我该如何解决?
该代码可从作者处获得。
您显然使用的是比 Delphi 6 更新的 Delphi 版本。尽管在 2005 年进行了更新,但该书中的代码仅检测到该版本的 Delphi。TDDefine.inc根据它检测到的版本定义了许多编译器符号,但是当您使用的版本不是它识别的任何东西时,它就没有定义符号。当编译器在TDBasics.pas中遇到这样的代码时,这最终会导致问题;
implementation
uses
{$IFDEF Delphi1}
WinTypes, WinProcs;
{$ENDIF}
{$IFDEF Delphi2Plus}
Windows;
{$ENDIF}
{$IFDEF Kylix1Plus}
Types, Libc;
{$ENDIF}
{$IFDEF Delphi1}
{$R TDStrRes.r16}
{$ENDIF}
{$IFDEF Delphi2Plus}
{$R TDStrRes.r32}
{$ENDIF}
{$IFDEF Kylix1Plus}
{$R TDStrRes.r32}
{$ENDIF}
const
UnitName = 'TDBasics';
由于没有定义 、 或 ,因此该Delphi1
子句Delphi2Plus
为空。当我们忽略所有编译器指令和非活动代码块时,编译器最终会看到如下代码:Kylix1Plus
uses
implementation
uses
const
UnitName = 'TDBasics';
这就是为什么编译器抱怨需要一个标识符而不是const
.
要修复它,您需要教TDDefine.inc识别您的 Delphi 版本。不过,更简单的方法可能是忽略所有版本检测代码,并对适用于您正在使用的版本的所有符号进行硬编码。只要您从不使用任何早于 Delphi 6 的版本,所有符号都将适用于您的所有版本。
在TDDefine.pas中找到以下代码块:
{$IFDEF VER140}
{$DEFINE Delphi6}
{$DEFINE Delphi1Plus}
{$DEFINE Delphi2Plus}
{$DEFINE Delphi3Plus}
{$DEFINE Delphi4Plus}
{$DEFINE Delphi5Plus}
{$DEFINE Delphi6Plus}
{$DEFINE HasAssert}
{$ENDIF}
删除第一行和最后一行,以便$DEFINE
无条件处理剩余的指令。