如何避免显示错误?

时间:2011-05-29 14:08:31

标签: delphi error-handling delphi-7

如何避免显示小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;

3 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:3)

错误框并不意味着引发了异常。可以在代码中显式显示错误框。

因此,似乎您的问题是“如何防止第三方代码按设计工作?”。除了反编译二进制文件之外,我担心我不能提出太多建议,特别是如果你没有源代码。

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

http://fastcode.sourceforge.net/

单位:FastcodePatch.pas

答案 2 :(得分:-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;