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

Gra*_*aza 18 delphi install packages

我真的厌倦了这个问题.谷歌搜索似乎总是建议"删除包的所有bpls","删除所有dcus".有时这只是不行.希望我能在这里得到一些其他的想法.

我有一个内部写的包,几个月前没有问题安装.对源进行了一些更改后,我认为是时候重新编译/重新安装软件包了.现在我得到两个错误,第一个如果我选择"安装"是

模块'dcc100.dll'中地址02422108的访问冲突.读取地址00000000.

...或者,如果我尝试构建/编译包,我得到

[Pascal致命错误] F2084内部错误:LA33

这是我们许多人似乎一次又一次出现的德尔福问题之一.如果我们能够按照"任何一个或这些步骤的组合可能修复它"的方式整理响应,那将会很棒,但是如果你做了所有这些步骤,它将修复它......

目前,我已删除了对此程序包的bpl/dcp文件的所有引用,但仍然得到相同的错误...

使用BDS2006(Delphi)

2008年10月1日更新:我设法解决了这个问题 - 请参阅下面的帖子.由于我不能接受我自己的答案,我不完全确定在这里做什么.显然,对于某些人来说,这些类型的问题经常发生,所以我会暂时保持开放以获得其他建议.然后我想如果有人将所有信息整理成一个超级帖子,我可以接受答案

Gra*_*aza 15

我按照以下程序设法解决了这个问题

  1. 创建一个新包
  2. 逐个将组件添加到包中,编译并安装,直到失败.
  3. 调查导致故障的单元.

事实证明,所讨论的单元有一个类常数数组,例如

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;
Run Code Online (Sandbox Code Playgroud)

所以看起来Delphi不喜欢包组件中的类常量(或者类常量数组)

更新:是的,这已经报告给codegear


Lar*_*ens 5

这些是编译器/链接器中的错误。您可以在互联网上找到不同 Delphi 版本中这些错误的许多参考,但它们并不总是相同的错误。这使得很难为所有这些不同类型的问题提供一种解决方案。

正如您所指出的,可能解决此问题的一般解决方案是:

  • 删除 *.dcp *.dcpil *.dcu *.dcuil *.bpl *.dll
  • 用另一种方式重写你的代码
  • 修改编译器选项
  • 获取最新的 Delphi 版本

我个人发现,如果关闭范围检查,此类错误之一就可以得到解决。如果您不使用其他单元的泛型,其他问题就可以解决。如果把单位名和班级名改小一点就解决了。

当然,您应该在http://qc.codegear.com上报告您遇到的任何问题