1#define EXPORTDLL _declspec(dllimport); //定义一个宏
EXPORTDLL class CShowDlg
{
public:
virtual void _stdcall ShowNote(char *pszText)//客户端想要访问动态链接库中的方法,此方法必须声明为虚函数
{
MessageBox(NULL,pszText,"提示",0);
}
};
CShowDlg* _stdcall GetShowDlg()
{
return new CShowDlg();
}
void _stdcall ReleaseShowDlg(CShowDlg *pShowDlg)
{
delete pShowDlg;
}
2.向动态链接库中导入资源文件,看一下资源文件的ID
将动态链接库中的函数导出,并防止C++编译器对函数名重新命名改变
.def文件
定义EXPORTS 点将两个函数导出
GetShowDlg=GetShowDlg;
ReleaseShowDlg=ReleaseShowDlg
3.如何访问动态链接库中的类和资源
为了访问MFC中动态链接库中定义类
在应用程序中,定义了一个和MFC中动态链接库中相同的类,抽象类
只有声明,没有实现
在应用程序中,定义一个抽象类
Class CShowDlg
{
public:
virtual void _stdcall ShowNoteDlg(char* pszText)=0;
}
定义函数指针类型
typedef ShowDlg*(_stdcall *funGetShowDlg)();
typedef void (_stdcall *funReleaseShowDlg) (CShowDlg* pShowDlg);
4.定义按钮事件
//加载动态数据库
HMODULE hMod=LoadLibrary("./test.dll");
if(hMod!=NULL)
{
//获取动态数据库中的GetShowDlg函数
funGetShowDlg GetShowDlg=(funGetShowDlg)GetProcessAdress(hMod,"GetShowDlg");
funReleaseShowDlg ReleaseShowDlg=(funReleaseShowDlg)GetProcessAdress(hMod,"ReleaseShowDlg");
if(GetShowDlg!=NULL&& ReleaseShowDlg!=NULL)
{
CShowDlg * pShowDlg=GetShowDlg();
pShowDlg->ShowNoteDlg("编程词典")
ReleaseShowDlg(pShowDlg);//释放pShowDlg对象
}
FreeLibrary(pShowDlg);
//加载资源
HMODULE hRes=LoadLibraryEx("./tell.dlll”,NULL,Load_LIBRARY_AS_DATAFILE);
if(hRes!=NULL)
{
HANDLE HbmP=LoadImage(hRes,MAKEINTRESOUCE(1000),IMAGE_BITMAP,0,0,0);
if(hBmp!=NULL)
{
HBITMAP holdBmp=m_Bmp.SetBitmap((HBITMAP)hBmp);
if(oldBmp)
{
deleteobject(holdBmp);
}
FreeLibrary(hRes);
}
}
}
如果有不正确的地方,请参考我的资源 dllTest
http://download.csdn.net/source/2836621