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

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值