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

2021-04-02 10:56:07 字數 1546 閱讀 9710

從mfc擴充套件動態鏈結庫中輸出對話方塊似乎是很容易的.你僅需要將相應類用afx_ext_class輸出即可。如果你用乙個應用程式和乙個動態鏈結庫建立或許會成功。但是如果你在應用程式和dll中都插入更多的資源,你將會得到嚴重錯誤。

原因如下:

表示乙個指定資源的正常途徑是用它的id。id是乙個用資源編輯器定義的整型常量。現在,假定你已有乙個資源(是字串)命名為id_my_text.

cstring strtext;

strtext.loadstring( id_my_text );

afxdump << strtext;

上述**將字串輸出到除錯視窗。有時你可能得到乙個錯誤,而且它只發生在如果文字在乙個mfc的擴充套件動態鏈結庫裡。錯誤的原因在於應用程式獲取乙個資源的途徑。因為應用程式和動態鏈結庫都有乙個資源檔案。不同的資源id有可能一樣(以為vc資源編輯器為每個模組確定id的起始編號方式)。

你可能認為在你的應用程式裡搜尋乙個資源的順序是首先為應用程式,而後為你的dll。我們需要改變搜尋資源的順序。

我寫了乙個類(在dll的main和對話方塊中有一些改變),允許你在任何你喜歡的地方呼叫你的對話方塊,就象:

我寫了乙個簡單的類,在類的建構函式中設定動態鏈結庫的資源控制代碼,在析構函式中設定先前的控制代碼。

/ // file extdllstate.h

#ifndef __extdllstate_h__

#define __extdllstate_h__

class cextdllstate

; #endif

file extdllstate.cpp

cextdllstate::cextdllstate()

cextdllstate::~cextdllstate()

//

你可能看它很短小,但是卻能做很多任務作:複製上面的類**到exdllstate.h和extdllstate.cpp中,將兩個檔案放入公有的include目錄下,使得每個專案找到它。在你的dll中,找到main原始檔,你會看到類似下面的一些**:

static afx_extension_module my_dll_namedll = ;

用 "extensiondll"替換該變數。放入下面的**:

#include "extdllstate.h"

#include "extdllstate.cpp"

在檔案的其他地方尋找my_dll_namedll的事件,用extensiondll替換它。事件只能在這個檔案裡發生,以為該變數是靜態的。

現在,如果你想輸出乙個對話方塊,請進入corresponding類的原始檔裡幷包含extdllstate.h,過載函式domodal()(最好使用classwizard),你將看到類似下面的**:

int cmydlldlg::domodal()

用"cextdllstate state;"替換todo行,就象下面:

int cdlldlgdlg::domodal()

你能在mfc擴充套件dll中想訪問資源的任何地方使用cextdllstate,而且總能得到正確的結果,我希望它能對你有所幫助。

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

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

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

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

MFC擴充套件對話方塊 即收縮對話方塊

mfc擴充套件對話方塊 即收縮對話方塊 效果圖如下,擴充套件前 上 擴充套件後 下 上下擴充套件 具體步驟如下 1.在.h檔案中新增如下 1private 2boolm shrink 標記是否收縮 3intm winheight 儲存對話方塊的高度 4intm shrinkheight 收縮後的對話...