我目前正在嘗試創建一個內置到我的Windows服務中的異常處理程序,該程序在未處理的異常情況下向另一個程序發送消息。我已經構建了方法並獲得了通信工作,但似乎每當我的程序拋出錯誤(我在代碼中強制調用它時),windows都會捕獲它,而Handler不會被調用。任何人都可以解釋我做錯了什麼?ExceptProc未在Windows中調用
簡化的代碼解釋:
procedure unhandled();
begin
raise Exception.Create('Unhandled');
end;
procedure ExceptionHandler(ExceptObject: TObject; ExceptAddr: Pointer);
begin
WriteLn('Display: ' + Exception(ExceptObject).Message);
//send Message Here
end;
我把這個代碼來運行它:
WriteLn('Starting');
ExceptProc := @ExceptionHandler;
unhandled();
我希望可以將輸出爲:
開始
顯示:未處理
但它是所有顯示:
開始
然後窗口返回約5秒鐘後的命令提示。
爲什麼不正確調用處理程序?
P.S.我一直在控制檯應用程序中運行這些測試以進行測試。
編輯:
這裏有一些更多的信息:
顯然,當你有一個分配ExceptProc,你的程序不應該拋出正常運行時217錯誤。我猜這是Windows捕獲的東西,但是從我所看到的,但是我的程序正在拋出運行時錯誤,並且我也無法獲得ErrorProc來捕獲它。