我在 Delphi 2009 的 TFields 实现中发现了一个错误,并编写了一个快速补丁。 我将 DB.pas 复制到我的项目文件夹并将其添加到项目的文件列表中,但现在我无法编译它。 当我转到代码中指定的位置时,前两个错误消息甚至没有任何意义。
如果有什么东西可以指望正确编译的话,那就是来自 CodeGear 的代码。他们已经成功编译它,生成 VCL 组件。 那么我错过了什么? 这是编译器的输出:
[DCC Error] DB.pas(2536): E2134 Type 'Pointer' has no type info
[DCC Error] DB.pas(10799): E2066 Missing operator or semicolon
[DCC Error] DB.pas(12933): E2217 Published field 'FCursor' not a class or interface type
[DCC Error] DB.pas(12934): E2217 Published field 'FTitle' not a class or interface type
[DCC Fatal Error] testing.dpr(23): F2063 Could not compile used unit '..\..\..\vclpatch\DB.pas'
如果在 DB.pas 单元的顶部添加以下行会有帮助吗?
{$A8,B-,C+,D+,E-,F-,G+,H+,I+,J-,K-,L+,M-,N-,O+,P+,Q-,R-,S- ,T-,U-,V+,W-,X+,Y+,Z1}
如果使用此行后有效,则说明您的项目选项与 CodeGear 用于编译 RTL/VCL 的设置不兼容。
顺便说一句:第 2536 行是仅包含文本“type”的行。你改过文件吗?或者您错过了更新 1?
我在 DB.pas 中遇到了同样的问题,但从未修改任何 VCL 单元。所以原因显然是我的项目。将 Emit 运行时类型信息 切换为 false 就成功了并解决了问题。
(项目选项:Delphi 编译器 -> 编译 -> 代码生成 -> 发出运行时类型信息)