如何解决Delphi的[Pascal致命错误] F2084内部错误:LA33?

时间:2020-03-06 14:55:34  来源:igfitidea点击:

我真的很烦这个问题。 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的任何单元上。