zoukankan      html  css  js  c++  java
  • 访问动态链接库中的C++类和资源

    面我们来介绍如何访问动态链接库中的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++类和资源
  • 相关阅读:
    笔记:Maven 聚合和继承
    笔记:Maven 仓库和插件配置本机私服
    笔记:Maven 插件配置
    笔记:Maven 仓库及配置详解
    笔记:Maven 插件及配置详解
    笔记:Maven 依赖及配置详解
    笔记:Maven 项目基本配置
    【问题解决方案】Mathtype中丢失Mplugin.dll的问题
    【学习总结】Python-3-字符串函数-strip()方法
    【学习总结】Python-3-字符串函数split()的妙用
  • 原文地址:https://www.cnblogs.com/lidabo/p/3291786.html
Copyright © 2011-2022 走看看