如何避免显示小Windows错误框时出错?
Try
和Except
不起作用,因为错误不是由Delphi显示的,而是来自程序或我认为来自Windows。
try
Size:=TFileStream.Create(BitFile,fmOpenRead);
except on E: EFCreateError
do EC.Add('Error: ' + IntToStr(GetLastError));
end;
答案 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;