1、 函數
a) DLL中:
extern "C" __declspec(dllexport) BOOL isPrime(int num)
{ BOOL flag = false; for(int i = 2 ; i < num ; i ++)
{
if(num % i == 0)
break;
}
if (i == num)
flag = true; elseflag = false;
flag = false;
return flag;
}
b) 應用程序
typedef BOOL ISPRIME(int);
ISPRIME *isPrime;
hm = ::LoadLibrary("mydll2.dll");
isPrime = (ISPRIME *)::GetProcAddress(hm,"isPrime");
if(isPrime(8))
MessageBox("是素數");
else
MessageBox("不是素數");
hm = ::LoadLibrary("mydll2.dll");
2、 類
a) DLL
i. IloveYou.h頭文件
class __declspec(dllexport) CILoveYou
{
public:
int GetValue();
void SetValue(int v);
CILoveYou();
virtual ~CILoveYou();
private:
int a;
};
ii. IloveYou.cpp程序文件
CILoveYou::CILoveYou()
{
a = 0;
}
CILoveYou::~CILoveYou()
{
}
__declspec(dllexport) void CILoveYou::SetValue(int v)
{
this->a = v;
}
__declspec(dllexport) int CILoveYou::GetValue()
{
return a;
}
b) 應用程序
先把#include "ILoveYou.h"文件導入進來,然後在StdAfc.h頭文件加入:
class __declspec(dllimport) CILoveYou;
訪問該類的代碼:
CILoveYou ily;
ily.SetValue(900);
char s[100];
wsprintf(s,"調用了類中的成員哦,值是:%d",ily.GetValue());
ShowMessage(this->GetSafeHwnd(),s);
MFC 規則DLL
1、 函數
a) DLL
此類DLL有一個繼承了CwinApp的類,但是函數可以不放在該類中。
extern "C" __declspec(dllexport) BOOL isOdd(int num)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());//此句一定要
if(num % 2 == 0)
return true;
else
return false;
}
b) 應用程序
void CTestdll2Dlg::OnButton5()
{
// TODO: Add your control notification handler code here
typedef BOOL ISODD(int);
ISODD *isOdd;
HINSTANCE hm;
if(hm = ::LoadLibrary("mfcdll4.dll"))
{
isOdd = (ISODD *)::GetProcAddress(hm,"isOdd");
if(isOdd)
{
if(isOdd(9))
MessageBox("是偶數");
else
MessageBox("不是偶數");
}
else
{
MessageBox("有問題");
}
::FreeLibrary(hm);
}
else
{
MessageBox("DLL加載失敗");
}
}
2、 類
a) DLL中的代碼
i. Clzh類的頭文件:lzh.h
class AFX_EXT_CLASS Clzh //此處一定要用AFX_EXT_CLASS
{
public:
CString GetValue();
void SetValue(CString str);
Clzh();
private:
CString str;
};
ii. Clzh類的實現文件:lzh.cpp
Clzh::Clzh()
{
}
__declspec(dllexport) void Clzh::SetValue(CString str)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
this->str = str;
}
__declspec(dllexport) CString Clzh::GetValue()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return str;
}
b) 應用程序
在StdAfx.h中頭文件中加入:class __declspec(dllimport) Clzh;
在要訪問該類的地方加入頭文件:#include "lzh.h"
程序如下:
void CTestdll2Dlg::OnButton7()
{
// TODO: Add your control notification handler code here
Clzh lzh;
lzh.SetValue("abc");
MessageBox(lzh.GetValue());
}