2009-09-07 101 views
3

当我编译我们的项目使用德尔福2010试用版,出现了一个致命的错误:Delphi2010编译器错误:F2084内部错误:L1737

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

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

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

谢谢。

+3

这里的代码片段将有所帮助。 – 2009-09-07 15:02:46

+1

这可能并非总是如此,但IME在Delphi 2010中所需的代码量超过了代码片段大小。 – 2009-09-07 15:13:16

+0

真的不知道粘贴这里的代码:( 只知道我是否删除了MainForm创建在DPR源代码中可以编译 似乎TMS组件导致了错误,但是这些组件已经在IDE中正常工作并且已经工作了 – dzb2k9 2009-09-08 03:27:44

回答

1

确保您的路径不会与旧版本的路径重叠。
确保删除了项目中使用的所有DCU,包括第三方组件(除非您有一些没有源代码的组件,在这种情况下仔细检查您是否拥有D2010的最新DCU),然后执行全部构建以重新生成所有这些组件。
然后尝试在较小的部分切割您的应用程序,并查看导致该问题的部分:目标是有最简单的可能的应用程序触发错误,以便能够将它发送给Embarcadero并为他们提供合理的机会找到问题...

+0

我尝试了你所说的,看起来有些UI组件导致了这个问题,因为如果我删除了Application.CreateForm(TFrmMain,FrmMain),它就是正常工作 我们在我们的MainForm上使用了旧版TMS组件VirtualTree I modif ied源使他们可以与D2010一起工作。 也许是这个问题。 – dzb2k9 2009-09-08 03:21:46

4

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

Internal Compiler Errors

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

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

0

不知道是这样,但这绝对是一个链接器错误(代码以L开头),其中大部分依次与函数或运算符重载有关。这些也可能由编译器错误引起 - 例如,在一些较旧的Delphi版本中(当然D5,我认为它在D7中已修复),那么在使用带有可选参数的重载构造函数时会出现链接错误。

0

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

+0

没有任何旧的DCU,我们彻底清理了它 – dzb2k9 2009-09-08 03:29:21

1

从Delphi 2009开始,情况有了很大的改善,但编译器中仍然有一些与泛型相关的故障,可能会导致类似的错误。检查是否尝试声明泛型类或方法,然后在异常情况下使用它们。如果是这样,请尝试将其提取到一个小的,可重复的测试用例中,并将其报告给QC。

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; 
1

我有同样的问题,因为泛型在过程中的字典类型声明(如Atle提到)。将该类型声明移至单元的实现部分的顶部之后 - L1737错误消失。

1

此处同样的错误。我删除此之前:

interface 

type 
    TBoolFunction = reference to function: Boolean; 

我不得不搬到其他地方的“参照......”从另一单元建设对接口减速来修复它。

0

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

尽管通常认为在delphi中将相关代码保存在同一个单元中,但它确实不会缩放,因此无法忽略并尽可能地分解。