我真的很讨厌这个问题。谷歌搜索一直似乎表明"中删除所有bpls包"、"删除所有dcus".有时这只是-不-不-工作。希望我能得到一些其他想法在这里。

我有一个包写在内,已安装的没问题几个月前。具有了一些变化来源,我觉得是时候重新编译/重新安装包。现在,我会得到两个错误第一,如果我选择"安装"是

访问冲突地址02422108在模块'dcc100.dll'.阅读的地址00000000.

...或者如果我尝试建立/汇编的包,我得到

[帕斯卡的致命错误]F2084内部的错误:LA33

这是那些德尔斐问题,似乎发生的时间和时间再次对我们许多人。将是巨大的,如果我们能整理一个响应沿线的东西"任何一个或这些组合的步骤 可能会 修好它,但是如果你这样做 所有 这些步骤它 修复。"

此刻,我已经删除所有提到的bpl/dcp文件对这个包,但是仍然得到同样的错误...

使用BDS2006(Delphi)

更新01-Oct-2008年:我设法解决这个-看看我的职务如下。因为我不能接受我自己的答案,我完全不知道该怎么做在这里。显然,这些类型的问题经常发生的对某些人,所以我就把它打开一段时间,获得的其他建议。然后我想如果有人整理的所有信息进入一个超级后,我可以接受的回答

有帮助吗?

解决方案

我设法按照以下程序解决了这个问题

  1. 创建新包
  2. 逐个将组件添加到包中,编译和放大安装,直到失败。
  3. 调查造成失败的单位。
  4. 事实证明,有问题的单位有一个类常数数组,例如

    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)错误不再出现了。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top