向动态链接库中添加类和资源-并访问动态链接库中的类和资源

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

你可能感兴趣的:(VC-动态链接库)