编译DPK项目时出现Delphi内部错误

编译DPK项目时出现Delphi内部错误,delphi,compiler-errors,delphi-xe3,Delphi,Compiler Errors,Delphi Xe3,我有一个DPK项目,它在编译(到DelphiIDE)时有时会显示错误(“内存不足”),有时它会成功编译。 但是,当我尝试通过MSBUILD编译它时,它总是抛出以下错误消息: 错误F2084:内部错误:AV004A784A-WFFFD3764-1 有人有办法解决吗?像这样的内部错误是编译器错误。我们无法解决这些问题,只有编译器开发人员才能解决。您需要向Embarcadero提交错误报告。鉴于XE3的古老性,您不太可能得到修复 Delphi的现代版本不太容易出现内存不足故障,因此如果升级是一种选择,

我有一个DPK项目,它在编译(到
DelphiIDE
)时有时会显示错误(“内存不足”),有时它会成功编译。 但是,当我尝试通过
MSBUILD
编译它时,它总是抛出以下错误消息:

错误F2084:内部错误:AV004A784A-WFFFD3764-1


有人有办法解决吗?

像这样的内部错误是编译器错误。我们无法解决这些问题,只有编译器开发人员才能解决。您需要向Embarcadero提交错误报告。鉴于XE3的古老性,您不太可能得到修复

Delphi的现代版本不太容易出现内存不足故障,因此如果升级是一种选择,那么这样做可能会回避问题


如果升级不是一个选项,那么每次遇到这些错误时,您可能都要继续混日子和诅咒。

这实际上非常常见(至少我经常遇到此类错误)。我确实采用了从DPK中逐步删除源代码文件的方法,直到编译成功。通过这种方式,您还可以看到是哪个文件导致了这些错误,然后继续一步一步地注释该文件中的源代码部分,直到找到有问题的行,然后重写它(以您需要找到自己的方式)。

正如David Heffernan所说,您没有办法真正解决它,因为错误是编译器或链接器的内部错误,只有编译器或链接器的开发人员才能删除该错误

但通常会有一些变通办法

根据我的经验,此类内部错误通常与泛型和匿名方法或内联代码有关,尤其是当这两个或所有这些方法结合在一起时

因此,请找出在内部错误发生之前所做的代码更改。如果使用版本控制系统或Delphi的内部历史记录系统,请恢复到以前的版本,直到错误消失。然后,您可以对“违规”代码进行更改,并查看是哪种代码导致了内部错误

通常,过于复杂的表达式(特别是对于我上面提到的类型)会导致内部错误。如果是这种情况,请先通过计算子表达式来简化表达式。另外,不使用特殊的泛型声明,如

x := TList<SomeType<Integer>>.Create;
x:=TList.Create;
您应该尝试使用预定义的类型:

type
  SomeTypeInteger = SomeType<Integer>;
  SometypeList = TList<SomeTypeInteger>;

  ...

  x := SometypeList.Create;
类型
SomeTypeInteger=SomeType;
SometypeList=TList;
...
x:=SometypeList.Create;
换句话说,

  • 通过回顾您的历史记录,直到它消失,尝试找到“冒犯”的代码
  • 一旦你找到了它,试着简化这段代码。解开表达式和预定义类型
  • 尝试不同的方式来表达代码,直到错误消失
如果您这样做,您可能成功地避免了内部错误。这常常需要我一些时间,但我总是找到一种方法来实现我想要的。如果你不能,可以在这里询问具体的错误(通过发布错误代码、确切的错误,如果可能的话,还有一个错误)

幸运的是,这些错误在最新的编译器中已变得非常罕见