每次都為dll書寫煩惱,書寫模式其實是固定的,下面就一步一步完全實現(xiàn)一個動態(tài)庫。
1、選擇MFC AppWizard(dll),項目名Demo,默認完成
2、新建一h文件DemoExp.h,導出模塊所有接口,新建一cpp實現(xiàn)接口
3、在DemoExp.h中:
// 下面兩行防止重復包含
#ifndef?_DEMOEXP_H???(注:可以是任意的)
#define?_DEMOEXP_H
// 下面一行預定義,在編譯的時候定義_DEMOEXP把函數(shù)導出,調(diào)用的時候沒有定義則導出函數(shù)
#ifdef _DEMOEXP???(注:可以是任意的)
#define DEMOEXPAPI __declspec(dllexport)
#else
#define DEMOEXPAPI __declspec(dllimport)
#endif
// 導出函數(shù)接口
DEMOEXPAPI int ShowDlg();
// 調(diào)用的時候沒有定義則自動連接
#ifndef _DEMOEXP???(注:和上面一樣)
?#pragma comment(lib, "Demo.lib")
#endif
#endif
4、在DemoExp.cpp中先空實現(xiàn):
#include "StdAfx.h"
#include "DemoExp.h"
DEMOEXPAPI int ShowDlg()
{
?return 0;
}
5、添加一對話框,并生產(chǎn)類CDemoDlg類
6、在DemoExp.cpp中:
#include "DemoDlg.h"
修改函數(shù)如下:
DEMOEXPAPI int ShowDlg()
{
?// 切換資源模塊
?AFX_MANAGE_STATE(AfxGetStaticModuleState());
?CDemoDlg?dlg;
?dlg.DoModal();
?return 0;
}
7、設(shè)置Setting->c/c++->Preprocessor definitions:添加,_DEMOEXP;stdafx.h中添加#include "Resource.h"
8、編譯即生產(chǎn)dll
9、添加一對話框程序測試,具體見示例代碼。