访问动态链接库中的C++类和资源

简介: 面我们来介绍如何访问动态链接库中的C++类和资源。其具体操作步骤如下:(1)创建一个基于对话框的工程,工程名称为“AccessDll”。设计对话框资源如图1所示。 图1  对话框资源设计窗口(2)定义一个名称为CTextDlg的抽象类,因为需要访问动态链接库中的CTextDlg类,因此客户端需要定义一个框架,即抽象类CTextDlg。
面我们来介绍如何访问动态链接库中的C++类和资源。其具体操作步骤如下:
(1)创建一个基于对话框的工程,工程名称为“AccessDll”。设计对话框资源如图1所示。
 
图1  对话框资源设计窗口
(2)定义一个名称为CTextDlg的抽象类,因为需要访问动态链接库中的CTextDlg类,因此客户端需要定义一个框架,即抽象类CTextDlg。
class CTextDlg             //定义抽象类CTextDlg
{
public:
 virtual void __stdcall ShowTextDlg(char* pchText) = 0;  //定义纯虚方法
};
(3)定义两个函数指针,用于关联动态链接库中的全局函数。
typedef CTextDlg*   (__stdcall *funGetTextDlg)();    //定义函数指针类型
typedef void  ( __stdcall *funReleaseTextDlg)(CTextDlg* pTextDlg); //定义函数指针类型
(4)处理“确定”按钮的单击事件,访问动态链接库中CTextDlg类的方法,并加载动态链接库中的位图资源。
void CAccessDllDlg::OnOK() 
{
 HMODULE hMod = LoadLibrary("ClassDll.dll");   //加载动态链接库
 if (hMod != NULL)        //判断是否加载成功
 {
  //获取动态链接库中的GetTextDlg函数
  funGetTextDlg GetTextDlg = (funGetTextDlg)GetProcAddress(hMod,"GetTextDlg");
  funReleaseTextDlg ReleaseTextDlg= (funReleaseTextDlg)GetProcAddress(hMod,
"ReleaseTextDlg");//获取动态链接库中的ReleaseTextDlg 函数
  if (GetTextDlg != NULL && ReleaseTextDlg != NULL) //判断函数指针是否为空
  {
   CTextDlg* pTextDlg =  GetTextDlg();  //调用动态链接库中的方法,构造CTextDlg对象
   pTextDlg->ShowTextDlg("编程词典");  //访问CTextDlg类的ShowTextDlg方法
   ReleaseTextDlg(pTextDlg);    //释放pTextDlg对象
  }
  FreeLibrary(hMod);       //卸载动态链接库
 }
 //加载动态链接库
HMODULE hRes = LoadLibraryEx("ClassDll",NULL,LOAD_LIBRARY_AS_DATAFILE);
 if (hRes != NULL)        //判断是否加载成功
 {
  //加载动态链接库中的位图,其中2000为动态链接库中的位图资源ID值
HANDLE hBmp = LoadImage(hRes,MAKEINTRESOURCE(2000),IMAGE_BITMAP,0,0,0);
  if (hBmp != NULL)       //判断加载位图是否成功
  {
   m_BK.SetBitmap((HBITMAP)hBmp);   //在空间中显示位图
  }
  FreeLibrary(hRes);       //卸载动态链接库
 }
}
 提示:为了获取动态链接库中的资源,我们需要使用LoadLibraryEx函数以数据文件的形式加载动态链接库。
(5)运行程序,单击“确定”按钮,效果如图2所示。
 
图2  访问动态链接库中的C++类和资源
目录
相关文章
存储 编译器 Linux
13 0
|
1天前
|
编译器 C++
标准库中的string类(上)——“C++”
标准库中的string类(上)——“C++”
|
1天前
|
编译器 C++
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(中)——“C++”
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(中)——“C++”
|
1天前
|
存储 编译器 C++
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(上)——“C++”
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(上)——“C++”
|
2天前
|
C++
【C++成长记】C++入门 | 类和对象(下) |Static成员、 友元
【C++成长记】C++入门 | 类和对象(下) |Static成员、 友元
|
2天前
|
存储 编译器 C++
【C++成长记】C++入门 | 类和对象(中) |拷贝构造函数、赋值运算符重载、const成员函数、 取地址及const取地址操作符重载
【C++成长记】C++入门 | 类和对象(中) |拷贝构造函数、赋值运算符重载、const成员函数、 取地址及const取地址操作符重载
|
11天前
|
存储 算法 C语言
【C++初阶】8. STL初阶 + String类
【C++初阶】8. STL初阶 + String类
47 1
|
11天前
|
C语言 C++
【C++初阶】9. string类的模拟实现
【C++初阶】9. string类的模拟实现
36 1
|
19天前
|
存储 安全 编译器
【C++】类的六大默认成员函数及其特性(万字详解)
【C++】类的六大默认成员函数及其特性(万字详解)
33 3
|
21天前
|
C++
4. C++类的组合
4. C++类的组合
26 0