2016-07-03 58 views
0

我有一個C#程序,它加載一個C++非託管dll並調用它的函數。該DLL執行一些操作,如果發生錯誤或異常,它會顯示一個Windows消息框。所以如果沒有遇到錯誤,則不會顯示消息框。值得一提的是,我沒有dll的來源。如何檢測C#中的messagebox調用

現在,如果我在C#中調用dll的函數,唯一確保成功執行的方法是檢查在調用過程中是否顯示任何消息框。我的問題是,我該怎麼做?即通過DLL檢測messagebox調用?

+1

由於您的應用程序正在調用函數,請嘗試捕獲'WndProc'中的'WM_INITDIALOG' –

+0

您能否提供更多詳細信息?我不是很熟悉c#@GillBates –

+0

顯示一個響應異常的消息框並不像是一個DLL的合理行爲。 DLL應該拋出異常,並讓* client *代碼處理它。只有當客戶端不處理它時,如果默認的未處理的異常處理程序顯示一個消息框。您確定這些不是簡單地調試消息,告訴您錯誤地使用了DLL(例如傳遞不正確的參數)? –

回答

0

您可以通過掛鉤MessageBox系列WINAPI如果DLL使用標準的消息框程序實現它。(谷歌WINAPI hook c#

但是,如果DLL不使用標準的消息框,你可能需要掛接CreateWindow或等。