Delphi2010编译器错误:F2084内部错误:L1737

时间:2009-09-07 09:01:10

标签: delphi compiler-construction

当我使用Delphi 2010试用版编译项目时,会出现致命错误:

[DCC致命错误] F2084内部错误:L1737

似乎是一个内部错误。没有暗示。

这是编译器错误还是试用限制?

感谢。

9 个答案:

答案 0 :(得分:4)

我不能给你一个明确的答案。看看

Internal Compiler Errors

编译器抱怨什么文件?任何想法可能是什么问题?使用的任何新功能仍然可能有问题吗?

编辑:我认为我们可以忘记试用限制......这将是一种非常奇怪的方式来表明试用期结束。

答案 1 :(得分:1)

自Delphi 2009以来,事情已经有了很大的改进,但编译器中仍然存在一些与Generics相关的故障,可能会导致这样的错误。检查您是否尝试声明泛型类或方法,然后在特殊情况下使用它们。如果是这样,请尝试将其提取到一个小的,可重现的测试用例并将其报告给QC。

答案 2 :(得分:1)

确保您的路径不会被旧版本的路径损坏 确保删除项目中使用的所有DCU,包括第三方组件(除非你有一些没有源的组件,在这种情况下仔细检查你有D2010的最新DCU)然后进行全部构建以重新生成所有这些。<登记/> 然后尝试用较小的部分剪切你的应用程序并查看导致问题的部分:目标是让最简单的应用程序触发错误,以便能够以合理的方式将其发送到Embarcadero他们有机会找到问题...

答案 3 :(得分:1)

最后,我发现了问题。

我们使用了Barry Kelly博客介绍的一种SmartPtr模式,D2010的编译器认为这种模式无效。和D2009的smartptr字很好。

非常感谢。

顺便说一句,我在这里发布了我的smartptr :)并且我们的地区仍然没有销售的D2010 :(

我不知道D2010编译器的实现有什么变化。

type

  TSmartPtr<T: class> = class(TInterfacedObject, TFunc<T>)
  private
    FValue: T;
  public
    constructor Create(AValue: T);
    destructor Destroy; override;
    function Invoke: T;
  end;

  TSmartPtrArray<T: class> = array of TFunc<T>;


implementation

{ TObjectHandle }

constructor TSmartPtr<T>.Create(AValue: T);
begin
  FValue := AValue;
end;

destructor TSmartPtr<T>.Destroy;
begin
  if Assigned(FValue) then
    FValue.Free;
end;

function TSmartPtr<T>.Invoke: T;
begin
  Result := FValue;
end;

答案 4 :(得分:1)

由于程序中的泛型字典类型声明(如Atle所述),我遇到了同样的问题。将该类型声明移动到单元的实现部分顶部后 - L1737错误消失了。

答案 5 :(得分:1)

这里的错误相同。我之前删除了这个:

interface

type
  TBoolFunction = reference to function: Boolean;

我不得不将其他单位的其他本地“引用...”结构移动到界面减速来修复它。

答案 6 :(得分:0)

不知道如此,但这绝对是一个链接器错误(代码以L开头),而且大多数这些都与函数或运算符重载有关。这些也可能来自编译器错误 - 例如,在一些较旧的Delphi版本(D5肯定,我认为它在D7中已修复),当使用带有可选参数的重载构造函数时,您会收到链接器错误。

答案 7 :(得分:0)

我认为你在旧的delphi版本中使用相同的库路径,因此使用不兼容的DCU。

答案 8 :(得分:0)

这意味着您的代码太复杂了 - 任何超过特定阈值(10k行左右)的文件都会出现这些问题 - 另一个是“使用不同版本的x编译错误”。

虽然人们常说将相关代码保存在delphi中的相同单元中,但它实际上并没有扩展所以忽略它并尽可能地分解。