如何解决Delphi的[Pascal致命错误] F2084内部错误:LA33?
我真的很烦这个问题。 Google搜索似乎总是建议"删除该程序包的所有bpls","删除所有dcus"。有时,这只是行不通。希望我能在这里得到一些其他的想法。
我有一个内部编写的软件包,几个月前已经安装好了,没有任何问题。在对源代码进行了一些更改之后,我认为是时候重新编译/重新安装该软件包了。现在我得到两个错误,第一个如果我选择"安装"的错误是
模块'dcc100.dll'中地址02422108的访问冲突。读取地址00000000
...或者如果我尝试构建/编译软件包,我会得到
[Pascal致命错误] F2084内部错误:LA33
这是我们许多人似乎一次又一次发生的那些Delphi问题之一。如果我们可以按照"任何一个步骤或者这些步骤的组合可能会解决问题,但如果我们执行所有这些步骤就可以解决问题……"的思路来整理响应,那将是很好的。
此刻,我已经删除了对该程序包中所有对bpl / dcp文件的引用,但是仍然出现相同的错误...
使用BDS2006(Delphi)
更新2008年10月1日:我设法解决了这个问题,请参阅下面的文章。由于我无法接受自己的答案,因此我不确定在这里做什么。显然,这类问题在某些人中经常发生,因此我将其搁置一段时间以获取其他建议。然后我猜如果有人将所有信息整理到一个超级帖子中,我就可以接受答案
解决方案
这些是编译器/链接器中的错误。我们可以在Internet上以不同的Delphi版本找到许多有关这些错误的参考,但是它们并不总是相同的错误。这使得很难为所有这些不同类型的问题提供一种解决方案。
如我们所述,可能解决此问题的一般解决方案是:
- 删除* .dcp * .dcpil * .dcu * .dcuil * .bpl * .dll
- 用另一种方式重写代码
- 修补程序与编译器选项
- 获取最新的Delphi版本
如果关闭范围检查,我个人发现此类错误之一可以解决。如果我们不使用其他单元中的泛型,则可以解决其他问题。如果将单元名称和类名称重命名为较小的名称,则解决了一个问题。
当然,我们应该在http://qc.codegear.com上报告任何问题。
我设法按照以下步骤解决了这个问题
- 创建一个新包
- 一步一步地将组件添加到程序包中,进行编译和安装,直到失败。
- 调查导致故障的单元。
事实证明,所讨论的单元具有类常量数组,例如
TMyClass = class(TComponent) private const ErrStrs: array[TErrEnum] of string = ('', //erOK 'Invalid user name or password', //erInvUserPass 'Trial Period has Expired'); //erTrialExp protected ... public ... end;
因此看来,Delphi不喜欢包组件中的类常量(或者类常量数组)
更新:是的,这已经报告给了codegear
我有一个类似的案例,解决方案是从/ lib / debug中删除文件urlmon.dcu。
它还可以完全关闭" use debug .dcus"。这当然是不希望的,但是我们可以使用它来检查问题是否出在我们自己的任何单元或者delphi的任何单元上。