2011-05-29 105 views
2

如何避免显示小Windows错误框的错误?
TryExcept不工作,因为错误不是由Delphi显示,而是从程序或我认为从Windows。
enter image description here
try
Size:=TFileStream.Create(BitFile,fmOpenRead);
except on E: EFCreateError
do EC.Add('Error: ' + IntToStr(GetLastError));
end;
如何避免显示错误?

+5

一个更好的版本,这个问题会表明您已经做了一些工作,以找出其中的错误消息来自何处,并定义什么是“外部事件”的意思究竟。 – 2011-05-29 15:49:36

+0

是的。没办法,你可以告诉这里发生了什么是没有错误,没有代码,甚至不知道消息来自哪里。 – GolezTrol 2011-05-29 16:13:51

+2

@Robrok:我很高兴看到你毕竟没有放弃发展。然而,在这种情况下,除非你解释“小窗口错误框”是什么,否则你不可能得到任何好的答案。也许你可以给我们一个对话框的截图,所以我们至少知道你在说什么类型的错误框... – 2011-05-29 16:17:35

回答

7

错误是否显示在您的应用程序中?否则,这是一个未处理的异常?或者它是由Windows或外部应用程序显示的框?

你说'事件',但事件处理程序也可以包含try..except块。

如果它是一个异常,并且您不知道它来自哪里,则可以使用TApplicationEvents类来附加Application.OnException事件。它会触发所有未处理的异常。在那里你可以捕获它,或者说,设置一个断点并使用堆栈跟踪来查看异常来自何处。

+0

你现在是我最喜欢的用户,你的答案是有效的,我爱你的男人。:) – 2011-05-29 18:27:24

+0

不客气。 :D – GolezTrol 2011-05-29 22:25:43

-4

private 
    { Private declarations } 
    public 
    procedure MyExceptionHandler(Sender : TObject; E : Exception); //define exception handler 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.dfm} 

procedure TForm1.MyExceptionHandler(Sender:TObject;E:Exception); 
begin 
    //Do nothing 
end; 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    Application.OnException := MyExceptionHandler; 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    //Generate an exception 
    asm 
    mov eax,8272 
    mov [eax],$2FFFFF 
    end 
end; 
+0

任何理由你downvoting我的答案??因为我看不到任何人 – opc0de 2011-05-29 18:32:25

+3

@ opc0de:没有解释代码正在做什么(或没有做什么)或者它如何回答问题......一大堆代码没有帮助。 (我知道我从来不会在没有理解的情况下粘贴一些代码。)除此之外...内联asm?我敢打赌,有很多更好的方法来在德尔福中产生一个例外...呃,我不知道,'提高'一个。我没有downvote,因为我不知道德尔福足以判断这个代码......但如果我这样做,那可能是原因。 – cHao 2011-05-29 18:49:55

+1

2个显而易见的原因downvote - *魔术*指针8272和*魔术* DWORD 2FFFFFh – 2011-05-29 21:13:38

3

一个错误框并不意味着异常被引发。错误框可以在代码中明确显示。

所以,你的问题似乎是“我怎样才能防止第三方代码工作如设计?”。除了反编译二进制文件之外,恐怕我不能提出太多建议,特别是如果你没有源代码。

如果您有源代码并知道需要替换的例程,您可以编写自己的替换程序并在运行时“劫持”例程。例如,这是fastcode项目用来代替delphi的例程而不重新编译VCL的方法。你可以在他们的项目中看到实现。

http://fastcode.sourceforge.net/

单位:FastcodePatch.pas