Delphi 2009中的编译错误OmniThreadLibrary-3.03b

时间:2014-06-19 11:02:03

标签: delphi delphi-2009

在Delphi 2009中编译OmniThreadLibrary-3.03b时出错...

错误是:

[DCC错误] GpStuff.pas(332):E2003未声明的标识符:' GetAsAnsiString'

[DCC错误] GpStuff.pas(332):E2003未声明的标识符:' GetSize'

[DCC错误] GpStuff.pas(332):E2003未声明的标识符:' SetAsAnsiString'

[DCC错误] GpStuff.pas(332):E2003未声明的标识符:' GetValue'

[DCC致命错误] OmniThreadLibraryRuntime2009.dpk(54):F2063无法编译使用过的单位' .. \ src \ GpStuff.pas'

任何人都知道为什么它会在Delphi 2009中提示所有上述错误???

1 个答案:

答案 0 :(得分:1)

在我看来,它就像Delphi 2009中的编译器错误。TGpBuffer中触发编译器警告的未声明标识符具有strict protected可见性。代码如下所示:

type
  TGpBuffer = class(TInterfacedObject, IGpBuffer)
  strict private
    FData: TMemoryStream;
  strict protected
    function  GetAsAnsiString: AnsiString; inline;
    function  GetSize: integer; inline;
    function  GetValue: pointer; inline;
    procedure SetAsAnsiString(const value: AnsiString);
  public
    constructor Create; overload;
    constructor Create(data: pointer; size: integer); overload;
    destructor  Destroy; override;
    procedure Add(b: byte); overload; inline;
    procedure Add(ch: AnsiChar); overload; inline;
    procedure Allocate(size: integer); inline;
    procedure Assign(data: pointer; size: integer); inline;
    procedure Clear; inline;
    function  IsEmpty: boolean; inline;
    property AsAnsiString: AnsiString read GetAsAnsiString write SetAsAnsiString;
    property Size: integer read GetSize;
    property Value: pointer read GetValue;
  end; { TGpBuffer }

错误发生在属性声明中,所有声明都引用strict protected getter和setter。这必须是编译器错误。一个类如何声明一个标识符而不能看到它?该代码在Delphi 2010中编译,因此我只能相信这是Delphi 2009中的编译器错误,可能更早(在Delphi 2005中添加了strict privatestrict protected)。

我建议您将strict protected更改为protected并查看代码是否已编译。 GpLists单位会遇到同样的问题。如果确实存在问题,请在OTL Google Code网站上提交错误报告。

最后,我建议您从版本控制中获取最新版本,而不是使用固定的ZIP文件下载。

更新:Primož已经对针对该bug的repo进行了更改。