exe呼叫dll中的對話方塊防資源衝突解決之道

2021-06-18 11:42:30 字數 1358 閱讀 7357

在編寫mfc

應用程式時,有時我們希望將對話方塊封裝在

dll動態庫中。但當

exe呼叫

dll中對話方塊時:

程式首先檢測exe

中的資源如果存在對應的對話方塊

id,那麼

dll中的對話方塊將採用

exe中的資源進行建立生成對話方塊,這樣就違背了我們的意願。

1)下面情況可以正確呼叫

dll工程中對話方塊:

在exe

工程資源中對話方塊id為

#define idd_exe_dialog                     5000

在dll

工程中對話方塊id為

#define idd_dll_dialog                     5001

2)下面情況可以錯誤呼叫了

exe工程中對話方塊:

在exe

工程資源中對話方塊id為

#define idd_exe_dialog                     5000

在dll

工程中對話方塊id為

#define idd_dll_dialog                     5000

對話方塊id

都是visual studio

自動生成的,人工修改

id,到達資源不衝突,對於小工程來說還能忍受。但對於幾千個對話方塊,甚至上萬的對話方塊資源來說也是一件麻煩的事。

mfc提供了下面兩個函式,於是我們只要在建立對話方塊之前對切換資源控制代碼即可。

// 獲取當前資源模組控制代碼

hinstance afxapi afxgetresourcehandle();

// 設定當前資源模組控制代碼

void afxapi afxsetresourcehandle(hinstance hinstresource);

於是在dll

工程中對需要匯出的對話方塊過載domodal()函式

int_ptr cdlldialog::domodal()

在exe

應用程式中新增選單響應事件:

// ctestdialogdoc 命令

exe呼叫dll中的對話方塊防資源衝突解決之道

在編寫mfc應用程式時,有時我們希望將對話方塊封裝在dll動態庫中。但當exe呼叫dll中對話方塊時 程式首先檢測exe中的資源如果存在對應的對話方塊id,那麼dll中的對話方塊將採用exe中的資源進行建立生成對話方塊,這樣就違背了我們的意願。1 下面情況可以正確呼叫dll工程中對話方塊 在exe工...

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

碰到乙個問題,在不同dll中對話方塊的呼叫一直報錯,除錯發現在oninitdialog 的時候系統死掉,網上一查才知道還是mfc了解的太少。網上提供了2種方法,一是將dll編譯成靜態鏈結,即通過更改專案屬性 配置屬性 常規 mfc的使用中更改,這個我直接pass了,因為我覺得都是本機測試,不會是因為...

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

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