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

2022-02-01 12:40:46 字數 2144 閱讀 8567

怎樣在擴充套件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,在客戶端寫上此訊息的響應函式,...