2011-04-15 77 views
0

我有一個Delphi 2010 DLL在Delphi 2010應用程序中加載。它在大多數時間都能正常工作。但是有一些異常可以從DLL中逃脫(即使是那些被try..except塊處理的異常),並且我的應用程序崩潰,沒有錯誤消息,根本沒有任何信息。我說的異常就像AV,不像開發人員提出的例外。我曾嘗試加載DLL SafeLoadLibrary沒有運氣。我也有應用程序和DLL源代碼。我不張貼DLL或應用程序源代碼,因爲我不能,他們是版權(我真的希望我可以)。Delphi DLL異常關閉我的應用程序

有什麼我可以做,以避免一個內部的DLL異常崩潰我的應用程序?

編輯

我沒有不允許DLL引發異常的方式。可能會發生,並不是所有的代碼都是完美的。這可能是不可避免的,該DLL引發一個異常,但它不應該崩潰的主要應用程序。想象一下,例如,你使用的是第三方的dll,你沒有源代碼。它不是一件好事,當這個DLL崩潰出於某種原因,你的主要應用程序被殺害。它必須有一種不允許發生的方式。

+0

試圖在一個小程序中複製錯誤,並在這裏發佈代碼。 – RBA 2011-04-15 13:22:29

+0

我會嘗試,但有時他們會關閉我的應用程序,有時他們不會。 – 2011-04-15 13:24:48

+3

你應該有一個Try/Except圍繞你的DLL中每個導出函數的主體。 – 2011-04-15 13:46:13

回答

1

你所要求的是不可能的。 DLL與執行進程共享相同的內存空間。這樣做可能會導致應用程序崩潰。

你確實有正確的想法,因爲你的DLL需要做它能做的。它需要成爲應用程序領域的一個好公民。

有些事情你可以做得很好。

  • 用try/except塊包裝每個導出的函數,並優雅地處理異常。
  • 在測試過程中,使用SafeMM檢查您可能沒有發現的內存問題。
  • 確保你沒有通過德爾福管理類型
相關問題