问题描述
|
如何避免显示Windows小错误框的错误?
Try
和Except
不起作用,因为该错误不是由Delphi显示,而是来自Program或我认为来自Windows。
try
Size:=TFileStream.Create(BitFile,fmOpenRead);
except on E: EFCreateError
do EC.Add(\'Error: \' + IntToStr(GetLastError));
end;
解决方法
应用程序中是否显示错误?否则,这是未处理的异常吗?还是Windows或外部应用程序显示的框?
您说\'event \',但是事件处理程序也可以包含try..except块。
如果是异常,并且您不知道它来自何处,则可以使用TApplicationEvents类附加Application.OnException事件。它将针对所有未处理的异常触发。您可以在此处捕获它,或者设置一个断点并使用堆栈跟踪来查看异常的来源。
, 错误框并不表示已引发异常。错误框可以在代码中明确显示。
因此,您的问题似乎是“如何防止第三方代码按设计工作?”。除了反编译二进制文件外,我还不能提出太多建议,尤其是在您没有源代码的情况下。
如果您具有源代码并且知道需要替换的例程,则可以编写自己的替换内容并在运行时“劫持”该例程。例如,fastcode项目使用这种方法来替换delphi的例程,而无需重新编译VCL。您可以在他们的项目中看到实现。
http://fastcode.sourceforge.net/
单位:FastcodePatch.pas
, 这里是
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;