1. 程式人生 > >建立一個MFC動態連結庫

建立一個MFC動態連結庫

       還沒好好的學習一下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檔案的呼叫。