当我使用Delphi 2010试用版编译项目时,会出现致命错误:
[DCC致命错误] F2084内部错误:L1737
似乎是一个内部错误。没有暗示。
这是编译器错误还是试用限制?
感谢。
答案 0 :(得分:4)
我不能给你一个明确的答案。看看
编译器抱怨什么文件?任何想法可能是什么问题?使用的任何新功能仍然可能有问题吗?
编辑:我认为我们可以忘记试用限制......这将是一种非常奇怪的方式来表明试用期结束。
答案 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中的相同单元中,但它实际上并没有扩展所以忽略它并尽可能地分解。