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

2021-07-23 11:46:36 字數 1090 閱讀 9612

在編寫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()  

在dll檔案呼叫函式的定義開始位置,加入上面**中的加黑**塊。中間位置 斜體、紅色**為你所需要的**

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

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

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成員...