2009-09-05 40 views
1

我在DirectX10遊戲引擎上喧鬧,我遇到了與DirectX無關的問題:P問題是,在包含引擎的DLL中,有時會調用DialogBox ,就像你在正常的win32下做的一樣。唯一的區別是,我不使用HINSTANCE,而是使用加載DLL時獲得的HMODULE。從DLL中顯示DialogBox和MessageBox

一切似乎工作正常,如果我通過我的代碼與F10(Visual C++ 2008),我甚至可以看到它通過我的DlgMessageProc函數,並做它應該做的一切。唯一奇怪的是沒有顯示對話框,突然間它跳出消息循環並繼續執行其餘代碼?

Weirly engough我從我的DLL中調用MessageBox的時候有同樣的問題,我沒有得到任何錯誤,似乎一切都工作正常,但沒有顯示窗口,也不是停止代碼(按正常的提示消息框)

有趣的是,我有一本書的代碼,它使用與我一樣的基本架構,如果我編譯的話,一切都顯示得很好?

所以我的問題,是否有任何隱藏的選項,pragama評論或其他事情我應該看看,如果我想能夠顯示MessageBoxes和對話框從我的dll?

回答

0

在Visual Studio資源編輯器的對話框資源的屬性頁面中,應該有一個選項,您可以在其中指定 - 「無失敗創建:真」。

由於無法創建通用控件,通常會因爲無法創建對話而導致對話失敗 - 通常是因爲尚未調用InitCommonControlsEx。設置無失敗創建標誌可讓您看到對話框並確定哪些控件丟失。


其他檢查事項:

  • 是否有關於第一個機會異常調試窗口的消息?也許是因爲被Win32捕獲和默默處理的異常而「跳出來」。在Dev Studio例外對話框中打開第一次機會win32例外的調試來跟蹤它。

    即使這也不能解釋MessageBox調用如何無法創建消息框。

  • 唯一次我見過的MessageBox不工作時是:

    1. 資源泄漏所取得的過程中耗盡可用USER32的處理 - 你檢查你的應用程序處理使用任務管理器計數?
    2. 系統正在關閉。你有沒有調用PostQuitMessage,然後嘗試創建一個對話框/ MessageBox?
+0

不,它不起作用。順便說一句,我確實調用了InitCommonControlls並調整了我的清單,因此我得到了XP/VISTA風格的按鈕,這會影響到什麼嗎?另一個mysterie是爲什麼我有與MessageBoxes相同的問題?這些應該完全由Windows處理。我有這樣的感覺,我需要鏈接額外的東西或設置命令行選項,但我絕對不知道。 我會試着看看我是否可以重建我的解決方案,但沒有經過調整的清單,但我認爲它不會做太多。 – 2009-09-05 17:46:40

+0

我重新啓動了系統並運行了解決方案,但沒有發生任何事情。然後我將一個消息框添加到了一個也稱爲靜態庫的庫中,發現問題更加嚴重。我有這個靜態庫必須運行,創建設備和釋放設備,如果我把一個消息框沒有任何反應。如果我把一個消息框放在鏈接到.lib的exe文件的主體中,那麼就有一個正常的消息框。所以我的系統沒有問題!!!!!我也沒有在我的調試輸出窗口中發現任何錯誤或警告 – 2009-09-06 09:14:34

0

沒有,因爲我以爲,chaning清單沒有幫助的。我也創建了一個單獨的項目,我只是測試對話框和它的proc函數,並有一切完美的工作(鏈接到.exe而不是DLL)