建立一個MFC動態連結庫
阿新 • • 發佈:2019-02-14
還沒好好的學習一下MFC,之前學過一段時間的QT,現在發現MFC與QT其實很相似,都很詳細的提供了介面庫,可能在具體的細節方面有不同吧,等著去發現。
一、建立DLL檔案
1、新建工程檔案如下:
2、選擇regular DLL using shared MFC DLL
3、切換到Resource框,在Dialog上右擊Insert Dialog,並且用View下面ClassWizard建立這個Dialog的類Mydialog,生成檔案MyDlg.cpp和MyDlg.h
自己的理解:mfcDll.cpp相當於是主檔案,程式執行時先從這裡開始,MyDlg.cpp是針對MyDlg對話方塊的類檔案。
4、在Dialog介面上面新增EditBox和Button,然後右擊ClassWizard,在Member Variables裡面為這兩個物件新增對應的變數值,以便在程式中呼叫這些控制元件
5、雙擊button按鈕,就可以為button新增click訊號的函式
void MyDlg::OnButton1()
{
// TODO: Add your control notification handler code here
m_MyEdit.SetWindowText("this is dll Dlg");
}
6、最關鍵是在mfcDll.cpp中新增入下程式,mfcDll.cpp相當於主程式(啟動程式時先執行),而MyDlg.cpp是對話方塊對應的類檔案extern "C" __declspec(dllexport) void ShowDlg(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// normal function body here
MyDlg dlg;
dlg.DoModal();
}
7、編譯之後生成二、使用DLL檔案
1、將mfcDll.dll檔案放入測試檔案dllTest資料夾下,這裡我並沒有新增.h檔案,也可以成功編譯,不知為什麼。
2、呼叫mfcDll.dll檔案中的函式
在dllTest對話方塊中新增按鈕“開啟DLL測試框”,併為這個按鈕新增如下程式碼:
void CDllTestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
typedef void (*pFunction)(void);
HINSTANCE hLibrary; //DLL控制代碼
hLibrary = LoadLibrary("mfcDll.dll");
if (hLibrary == NULL) MessageBox("DLL載入失敗");
pFunction pShowDlg = (pFunction)GetProcAddress(hLibrary,"ShowDlg");
if (NULL==pShowDlg) MessageBox("DLL中不存在指定的函式");
else pShowDlg();
}
以上便完成了對DLL檔案的呼叫。