我需要一些帮助;我正在帮助朋友移植几年前建立在新版本Windows上的Delphi应用程序,因为它目前只在Windows 95上运行。
该代码使用Woll2Woll的第三方库进行数据库操作。
其中一个库生成错误E2003 Undeclared标识符:'self'。
我通过Google浏览了很多网站,并且我对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参数更改为什么才能停止编译错误?
感谢筹码。
答案 0 :(得分: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;