怎樣在擴充套件dll中使用對話方塊
輸入名稱extdll
選擇mfc extension dll(using shared mfc dll)
finish.
新增對話方塊idd_dlldialog
為對話方塊建立新類 class cextdialog : public cdialog
刪掉extdialog.cpp中的#include " \ add additional includes here"這句話
在stdafx.h中新增#include "resource.h"
否則的話,編譯會出現如下錯誤:
extdialog.h(21) : error c2065: 'idd_dlldialog' : undeclared identifier
extdialog.h(21) : error c2057: expected constant expression
編譯,ok!
修改extdialog.h中cextdialog類的宣告為:
classafx_ext_classcextdialog : public cdialog
;protected:
virtual void dodataexchange( cdataexchange* pdx );
declare_message_map()
};這其中最主要的改變是我們在class afx_ext_class cextdialog語句中新增了「afx_ext_class」巨集,則使得dll中的cextdialog類被匯出。
這時,匯出類還沒法被使用(求牛人講解下 這裡不知道為什麼 但我試了 不建立輸出類cuseextdialog 只有這個對話方塊類cextdialog的話 呼叫dll的時候就報錯 錯誤是error c2065: 'idd_dialog1' : undeclared identifier),我們需要新建另外乙個類來呼叫cextdialog 類,並且把新建的類作為匯出類,這樣,類cextdialog 的宣告變成:
class cextdialog : public cdialog
;protected:
virtual void dodataexchange( cdataexchange* pdx );
declare_message_map()
};建立輸出類:
insert-> new class...在開啟的對話方塊中,"class type" 選擇"generic class",class name 中輸入
cuseextdialog--當然你可以用其它的名稱,然後"ok";
這時,需要對類cuseextdialog稍微修改,加上: public cobject 變成
classafx_ext_classcuseextdialog : public cobject
; //afx_ext_class表示cuseextdialog是輸出類
呼叫extdialog類的對話方塊的函式showdlg()如下:
#include "extdialog.h" //在useextdialog.cpp中
int cuseextdialog::showdlg()
return 0;
}在dll工程所在的工作區中新增乙個loadextdlldlg工程,用於演示mfc擴充套件dll的載入。在loadextdlldlg工程中新增乙個對話方塊,這個對話方塊上包括乙個「呼叫dll」按鈕。
對應對話方塊類實現檔案的頭部新增:
// loadextdlldlg.cpp : implementation file
//#include "..\useextdialog.h"
#pragma comment( lib, "extdll.lib" )
而「呼叫dll」按鈕的單擊事件的訊息處理函式為:
void cloadextdlldlg::ondllcallbutton()
else
}編譯,執行,會出現乙個對話方塊,點選"dll呼叫"按鈕,會出現dll匯出類中呼叫的對話方塊,選擇"ok"會出現"ok"訊息框,選擇"cancel"會出現"cancel"訊息框.
**:
關於Mfc擴充套件dll的使用
1 例如,mfc擴充套件dll為exporta工程,mfc擴充套件dll為exportb工程,則exportb工程在使用exporta時,出現鏈結錯誤,開始以為沒有新增依賴庫或者到處類錯誤,但是檢視多次還是出現問題,後來上網查資料,發現afx ext data如下 exportb的dll工程使用ex...
在MFC擴充套件DLL中輸出對話方塊
從mfc擴充套件動態鏈結庫中輸出對話方塊似乎是很容易的.你僅需要將相應類用afx ext class輸出即可。如果你用乙個應用程式和乙個動態鏈結庫建立或許會成功。但是如果你在應用程式和dll中都插入更多的資源,你將會得到嚴重錯誤。原因如下 表示乙個指定資源的正常途徑是用它的id。id是乙個用資源編輯...
MFC擴充套件DLL 小結
1 在dll中啟動多執行緒,用 beginthread 不能使用afxbeginthread 2 dll中與客戶程式之間通訊可以有2中方法 1 通過訊息,在dll中增加乙個自定義訊息,此訊息的id注意不能和客戶端程式中的訊息重複。在客戶端程式中將視窗控制代碼傳給dll,在客戶端寫上此訊息的響應函式,...