0

我需要一点帮助;我正在帮助一个朋友将一个多年前构建的 Delphi 应用移植到较新版本的 Windows,因为它目前只能在 Windows 95 上运行。

该代码利用 Woll2Woll 的 3rd 方库进行数据库操作。

这些库之一会生成错误 E2003 Undeclared identifier: 'self'。

我通过谷歌浏览了许多网站,并且我对 Delphi 的了解有限(源于我大约 12 年前的 Pascal 培训,并推断出我稍微生锈的 PHP、BASH、ColdFusion 和 ASP 编码技能),我遇到了砖墙 - 我时间紧迫,无法理解我在网络上遇到的信息。

有问题的代码段来自 wwwQuery.pas 文件,如下所示:

   {$ifdef wwDelphi3Up}
    procedure TwwQuery.OpenCursor(InfoQuery: Boolean);
   {$else}
   procedure TwwQuery.OpenCursor;
   {$endif}
    begin
       {$ifdef wwDelphi3Up}
       inherited OpenCursor(InfoQuery);
       {$else}
       inherited OpenCursor;
       {$endif}
       //Modded by Arie
       //wwSaveAnswerTable(self, Handle, FAnswerTable);
       wwSaveAnswerTable(self, Handle, 'FAnswerTable');
    end;

确切的错误消息是:

[DCC Error] wwQuery.pas(243): E2003 Undeclared identifier: 'self'
[DCC Error] wwQuery.pas(244): E2029 '.' expected but ';' found
[DCC Fatal Error] wwcommon.pas(285): F2063 Could not compile used unit 'wwQuery.pas'

第 243 行是倒数第二行,就在结尾的上方;

wwSaveAnswerTable 函数如下所示:

Function wwSaveAnswerTable(ADataSet: TDBDataSet; AHandle: HDbiCur; tableName: string): boolean;

我必须将 Self 参数更改为什么才能停止编译错误?

谢谢一叠。

4

1 回答 1

2

该问题与编译器定义 wwDelphi3Up 或任何相关的代码有关。

正如您看到的下一条错误消息:[DCC 错误] wwQuery.pas(244): E2029 '.' 预期但';' 成立

编译器期望程序结束,并且行 wwSaveAnswerTable(self, Handle, 'FAnswerTable'); 不在 OpenCursor 方法中编译。这就是Self没有被定义的原因。

您不需要更改参数,因为肯定会影响功能。

如果您不使用古老版本的 Delphi,请尝试在没有定义的情况下编译它:

procedure TwwQuery.OpenCursor(InfoQuery: Boolean);
begin
   inherited OpenCursor(InfoQuery);
   wwSaveAnswerTable(self, Handle, 'FAnswerTable'); // Here prob FAnswerTable without quotes
end;
于 2012-06-26T13:18:36.713 回答