MFC不同dll中對話方塊的呼叫問題

2021-07-24 15:50:46 字數 808 閱讀 3592

碰到乙個問題,在不同dll中對話方塊的呼叫一直報錯,除錯發現在oninitdialog()的時候系統死掉,網上一查才知道還是mfc了解的太少。

網上提供了2種方法,一是將dll編譯成靜態鏈結,即通過更改專案屬性-配置屬性-常規-mfc的使用中更改,這個我直接pass了,因為我覺得都是本機測試,不會是因為這個

問題,第二種方法是在定義對話方塊之前加上:

afx_manage_state(afxgetstaticmodulestate())

afx_manage_state字面理解就是管理某種狀態,而括號裡的就是獲取某種靜態的模組狀態,在mfc中,states用來儲存某種相關的狀態資訊,例如:

1:process state 和某個單獨的程序繫結起來

2:thread state 和某個單獨的執行緒繫結

前兩種state和一般的全域性變數十分類似, 只是根據需求的不同被繫結於不同的程序或者執行緒,如多執行緒支援等。而module state本身比較特別,module state根據情況的不同,可以是全域性 、執行緒、或者程序相關的state,並且可以根據要求快速切換。

時隔多天,又遇見這個問題,還是跨dll呼叫對話方塊出問題,特地回來看看部落格,之前一直不理解的也突然理解了。

說白了,mfc呼叫的都是主程式的資源模組,而對話方塊資源是儲存在自己的dll下面的,在主程式的資源檔案裡是看不到的,所以mfc提供了乙個開關,來得到正確的控制代碼。

ps:如果想在別的類中包含自己新新增的對話方塊類,則需要把應用程式的主標頭檔案加上,否則會出現 idd_dialog未命名的情況,原因是沒有新增#include "resource.h"

ATL寫的DLL中呼叫MFC對話方塊

專案需求,製作bho並且要求有個按鈕。bho使用atl實現,按鈕我想使用mfc的dialg上放置按鈕的方式。先將atl工程改成支援 mfc,見 或是在建立工程是直接選上suppot mfc。新增dialog資源,然後在繼承於iobjectwithsiteimpl介面的bho類裡新增上dialog成員...

呼叫mfc擴充套件型dll使用對話方塊

怎樣在擴充套件 中使用對話方塊 輸入名稱extdll 選擇mfc extension dll using shared mfc dll finish.新增對話方塊idd dlldialog 為對話方塊建立新類 class cextdialog public cdialog 刪掉extdialog.c...

在MFC擴充套件DLL中輸出對話方塊

從mfc擴充套件動態鏈結庫中輸出對話方塊似乎是很容易的.你僅需要將相應類用afx ext class輸出即可。如果你用乙個應用程式和乙個動態鏈結庫建立或許會成功。但是如果你在應用程式和dll中都插入更多的資源,你將會得到嚴重錯誤。原因如下 表示乙個指定資源的正常途徑是用它的id。id是乙個用資源編輯...