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++类和资源
  • 相关阅读:
    Python之路Day14
    Python 之路Day13
    PYthon之路Day12
    三层与“养猪”
    参数化查询---解决sql漏洞注入
    关于在asp.net中的调试
    构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(21)-权限管理系统-跑通整个系统
    构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(20)-权限管理系统-根据权限获取菜单
    构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(19)-权限管理系统-用户登录
    构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(18)-权限管理系统-表数据
  • 原文地址:https://www.cnblogs.com/lidabo/p/3291786.html
Copyright © 2011-2022 走看看