2011-05-29 106 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