2010-07-28 47 views
4

我維護用Delphi 6編寫的程序。它使用SysUtils.LoadPackage動態加載一些bpl包文件。我經常在程序中改變一些導致程序包加載失敗的東西。發生這種情況時會出現一個消息框,然後引發異常。消息框和異常是分開的。如何在加載Delphi包時抑制入口點未找到錯誤?

這裏的消息框的例子:

--------------------------- 
Connect Manager: ConnectManager.exe - Entry Point Not Found 
--------------------------- 
The procedure entry point @[email protected]@[email protected] could not be located in the dynamic link library ConnectManagerPack.bpl. 
--------------------------- 
OK 
--------------------------- 

而這裏的例外:

--------------------------- 
Debugger Exception Notification 
--------------------------- 
Project ConnectManager.exe raised exception class EPackageError with message 'Can't load package Projects.bpl. 
The specified procedure could not be found'. Process stopped. Use Step or Run to continue. 
--------------------------- 
OK Help 
--------------------------- 

我看不出如何阻止出現消息框。任何想法感激地接受。

+0

你確定第二個消息來自你的應用程序而不是Delphi調試器嗎? – 2010-07-28 12:45:57

+0

第二條消息是我的應用程序引發的異常,並被調試器捕獲。 – cja 2010-07-28 12:47:45

回答

3

解決!

我在我的應用程序中創建了一個SysUtils.LoadPackage的副本,並編輯了此副本以將第二個參數傳遞給SafeLoadLibrary。

所以調用SafeLoadLibrary現在看起來像:

Result := SafeLoadLibrary(Name, SEM_FAILCRITICALERRORS); 

這幫助:http://msdn.microsoft.com/en-us/library/ms680621%28VS.85%29.aspx

+0

這將抑制第一個錯誤消息。好主意。調試程序在應用程序引發異常時顯示第二條錯誤消息。進行此更改後,您的程序仍會引發該異常。您可以[重新配置調試器](http://www.cs.wisc.edu/~rkennedy/exception-messages),或者您可以按該消息框上的「繼續」按鈕,並讓您的程序在調試器的通知。另外,考慮在調用SafeLoadLibrary時包含'sem_NoOpenFileErrorBox',因爲這是默認設置。 – 2010-07-28 13:49:14

相關問題