如何解决德尔福[Pascal致命的错误]F2084内部的错误:LA33?
题
我真的很讨厌这个问题。谷歌搜索一直似乎表明"中删除所有bpls包"、"删除所有dcus".有时这只是-不-不-工作。希望我能得到一些其他想法在这里。
我有一个包写在内,已安装的没问题几个月前。具有了一些变化来源,我觉得是时候重新编译/重新安装包。现在,我会得到两个错误第一,如果我选择"安装"是
访问冲突地址02422108在模块'dcc100.dll'.阅读的地址00000000.
...或者如果我尝试建立/汇编的包,我得到
[帕斯卡的致命错误]F2084内部的错误:LA33
这是那些德尔斐问题,似乎发生的时间和时间再次对我们许多人。将是巨大的,如果我们能整理一个响应沿线的东西"任何一个或这些组合的步骤 可能会 修好它,但是如果你这样做 所有 这些步骤它 将 修复。"
此刻,我已经删除所有提到的bpl/dcp文件对这个包,但是仍然得到同样的错误...
使用BDS2006(Delphi)
更新01-Oct-2008年:我设法解决这个-看看我的职务如下。因为我不能接受我自己的答案,我完全不知道该怎么做在这里。显然,这些类型的问题经常发生的对某些人,所以我就把它打开一段时间,获得的其他建议。然后我想如果有人整理的所有信息进入一个超级后,我可以接受的回答
解决方案
我设法按照以下程序解决了这个问题
- 创建新包
- 逐个将组件添加到包中,编译和放大安装,直到失败。
- 调查造成失败的单位。 醇>
事实证明,有问题的单位有一个类常数数组,例如
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;
因此看起来Delphi不喜欢包组件中的类常量(或者类常量数组)
更新:是的,已经向codegear报告
其他提示
这些都是错误的编译器/接头。你可以找到许多文献中的这些错误,在互联网上在不同的特尔斐版本,但他们并不总是相同的错误。这使得它很难得到一个解决方案为所有这些不同种类的问题。
一般的解决办法可能解决它们,因为你注意到:
- 删除*.dcp*.dcpil*.dcu*.dcuil*.bpl*.dll
- 重写代码在另一个办法
- 修补编译器的选择
- 得到的最新版本德尔福
我发现一个这样的错误来解决如果我关闭的范围内检查。其他人都解决了,如果你不使用仿制药,从另一个单元。和一个得到解决,如果该单元的名称和类名称被更名为较小。
当然,你应该报告的任何问题,你有 http://qc.codegear.com
也许以下步骤将是更好的解决方案:
将数组声明为类型,并使用此类型定义类常量,例如
TMyArray = array[TErrEnum] of string;
TMyClass = class(TComponent)
private
const ErrStrs: TMyArray
= ('', //erOK
'Invalid user name or password', //erInvUserPass
'Trial Period has Expired'); //erTrialExp
protected
...
public
...
end;
这使得数组声明显式。
我在这个问题上浪费了几个小时,删除了dcu等等无济于事。
最后,对我有用的是取消选中编译器选项中的溢出检查,重建项目,重新检查溢出检查,以及重新重建。瞧!问题已经消失。去搞清楚。 (仍在使用D7)。
我有类似的情况,解决方法是从/ lib / debug中删除文件urlmon.dcu。
它也可以关闭“使用debug .dcus”。共。这当然是不可取的,但是您可以使用它来检查问题是否与您自己的任何单位或任何delphi的单位有关。
尝试清理“输出目录”所以德尔福不能肮脏的.DCU,它被强制给.PAS。 有时这有帮助。 如果您没有配置“输出目录”,请尝试删除(或更好地移动备份文件夹)所有.DCU文件。
Delphi XE3 Update 2
F2084内部错误:URW1147
案例1:
问题是类型是在泛型类的过程中声明的。
procedure TMyClass<TContainerItem, TTarget>.Foo();
type
TCacheInfo = record
UniqueList: TStringList;
UniqueInfo: TUniqueInfo;
end;
var
CacheInfo: TCacheInfo;
将类型声明移动到类声明的私有部分解决了这个问题。
案例2:
在这种情况下,问题与可选参数有关:
unit A.pas;
interface
type
TTest<T> = class
public
type
TTestProc = procedure (X: T) of object;
constructor Create(TestProc_: TTestProc = nil);
end;
...
一旦TTest类的变量在另一个单元中声明,就会发生内部编译错误:例如
unit B.pas:
uses A;
var
Test: TTest<TObject>;
解决方案是使 TestProc _
的构造函数参数不可选。
对我来说,在D2010中禁用编译器选项“Emit runtime type information”做了伎俩。
禁用“包含远程调试符号”来自链接器选项修复了我的问题Delphi 2007,dll项目
从各种答案中,此错误看起来是编译器的一般未处理异常。
我的问题是由于错误地调用 function X(someString:String):Boolean;
,它改变了字符串并返回了一个布尔值,使用 someString:= X(someString); 代码>
正如我对内部错误的体验那样,我重新逐行编写并再次编译,并意识到某些if else语句不能像
那样工作发生内部错误
if (DataType in ASet)
begin
//do work
end
else if (DataType = B)
begin
//do work
end
else
begin
//do work
end;
我是如何解决的:
if (DataType = B)
begin
//do work
end
else if (DataType in ASet)
begin
//do work
end
else
begin
//do work
end;
只是将条件改为示例。希望它有所帮助。
我刚刚经历了类似的行为,导致内部错误LA30。
原因是新添加了字符串常量。
改变之后
const cLogFileName:string ='logfilename.log';
要
const cLogFileName ='logfilename.log';
(当然重新启动Delphi IDE)错误不再出现了。