1.MFC擴展的DLL的編寫與使用
1.1編寫MFC擴展的DLL
File->New->Project 選擇MFC DLL
Next 保持默認設置即可
在MFCDLL.def文件中添加導出函數名稱HintBox,程序代碼如下所示
; MFCDLL.def : 聲明 DLL 的模塊參數。
LIBRARY
EXPORTS
; 此處可以是顯式導出
HintBox
LIBRARY
EXPORTS
; 此處可以是顯式導出
HintBox
在頭文件MFCDLL.h文件中聲明導出函數,程序代碼如下所示
// CMFCDLLApp
// 有關此類實現的信息,請參閱 MFCDLL.cpp
//
extern "C" void PASCAL EXPORT HintBox();
class CMFCDLLApp : public CWinApp
{
public:
CMFCDLLApp();
// 重寫
public:
virtual BOOL InitInstance();
DECLARE_MESSAGE_MAP()
};
在文件MFCDLL.cpp中定義函數的實現部分,棋程序代碼如下所示
extern "C" void PASCAL EXPORT HintBox()
{
AfxMessageBox("您工作的時間太長了,請休息片刻!");
}
{
AfxMessageBox("您工作的時間太長了,請休息片刻!");
}
最後 選擇Build->"Build MFC DLL"命令。
1.2使用MFC擴展的DLL
1.2.1 靜態鏈接
#include "mfcdll.h"
#pragma comment(lib,"mfcdll.lib")
void CusedllmfcDlg::OnBnClickedButton1()
{
HintBox();
}
#pragma comment(lib,"mfcdll.lib")
void CusedllmfcDlg::OnBnClickedButton1()
{
HintBox();
}
1.2.2動態鏈接
不需要加載頭文件
typedef void(*fun)();
void CusedllmfcDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知處理程序代碼
fun f;
HINSTANCE hInstLibrary=LoadLibrary(_T("MFCDLL"));
if(hInstLibrary==NULL)
{
FreeLibrary(hInstLibrary);
MessageBox("DLL加載失敗");
}
f=(fun)GetProcAddress(hInstLibrary,"HintBox");
if(f==NULL)
{
FreeLibrary(hInstLibrary);
MessageBox("HintBox函數加載失敗");
}
f();
}
2Win32 DLL的創建和使用
2.1Win32DLL的創建
新建一個factorial.h文件,添加如下代碼
#ifndef FACTORIAL_H
#define FACTORIAL_H
extern "C" _declspec(dllexport) int factorial(int n);
#endif
#define FACTORIAL_H
extern "C" _declspec(dllexport) int factorial(int n);
#endif
在factorial.cpp文件中,添加如下代碼
// factorial.cpp : 定義 DLL 應用程序的導出函數。
//
#include "stdafx.h"
int factorial(int n)
{
n++;
return n;
}
//
#include "stdafx.h"
int factorial(int n)
{
n++;
return n;
}
選擇"Build"->"Build factorial"命令 即可。
2.2Win32DLL的使用
使用方式同MFC的DLL一樣,也具備兩種方式。