本例通過新建一個MFC規(guī)則DLL并新建一個MFC對話框程序調用它,演示MFC規(guī)則DLL的創(chuàng)建及調用。(VS2010環(huán)境下實例代碼親測可編譯通過)
一、MFC規(guī)則DLL項目
1.創(chuàng)建MFC規(guī)則DLL
2.新建global.cpp(新建此文件沒有特殊意義,僅用于單獨添加創(chuàng)建并顯示對話框的代碼)并添加以下代碼:
- # include "stdafx.h"
- # include "dlldialog.h"
- //定義輸出庫函數(shù),以被MFC程序調用
- extern "C" __declspec(dllexport) void ShowDlg(void)
- {
- //添加AFX_MANAGE_STATE宏,進行DLL模塊狀態(tài)資源的切換
- AFX_MANAGE_STATE(AfxGetStaticModuleState());
- //創(chuàng)建DLL對話框
- dlldialog dllDialog;
- dllDialog.DoModal();
- }
3.添加了一個對話框資源,并向其加入按鈕一個
4.雙擊3創(chuàng)建的DLL對話框資源,向該對話框添加dlldialog類
5.雙擊3對話框中創(chuàng)建的按鈕,為該按鈕添加代碼:
- //添加DLL內部對話框中按鈕的事件處理程序代碼
- void dlldialog::OnBnClickedButton1()
- {
- MessageBox(_T("調用DLL內部對話框成功!"));
- }
6.向dlldialog.h添加了一個頭文件,以解決找不到對話框資源的問題
- # include "resource.h"http://務必手動添加此條語句!否則在VC++2010環(huán)境下編譯會報“IDD_DIALOG1未定義的標識符”的錯
7.生成mfcdll
二、創(chuàng)建callmfcdll MFC對話框程序
1.創(chuàng)建MFC對話框程序以用于調用mfcdll生成的dll
2.添加了一個對話框資源,并向其加入按鈕一個
3.雙擊1對話框中創(chuàng)建的按鈕,以動態(tài)顯式調用生成的dll文件
- void CcallmfcdllDlg::OnBnClickedButton1()
- {
- //聲明函數(shù)指針
- typedef void (*lpCall)(void);
- //創(chuàng)建dll句柄
- HINSTANCE hDll;
- //裝載dll
- hDll = LoadLibrary(_T("mfcdll.dll"));
- if(NULL==hDll)
- {
- AfxMessageBox(_T("DLL加載失敗!"));
- }
- //檢索指定DLL中的輸出庫函數(shù)地址
- lpCall pShowDlg=(lpCall)GetProcAddress(hDll,"ShowDlg");
- if(NULL==pShowDlg)
- {
- AfxMessageBox(_T("DLL內部函數(shù)調用失敗!"));
- }
- //創(chuàng)建DLL對話框
- pShowDlg();
- }
4.生成callmfcdll
三、測試運行
將mfcdll項目中編譯生成的mfcdll.dll放在callmfcdll項目中生成MFC程序的Debug文件夾下,雙擊打開生成的應用程序并點擊其對話框中間位置的按鈕,即發(fā)現(xiàn)調用成功
附:已將該項目的整套實例代碼打包上傳至本人的資源頻道(下載地址為:http://download.csdn.net/detail/callbackfunc/4032396),用戶可自行下載。