• 访问动态链接库中的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++类和资源
  • 相关阅读:
    Hibernate save, saveOrUpdate, persist, merge, update 区别
    Eclipse下maven使用嵌入式(Embedded)Neo4j创建Hello World项目
    Neo4j批量插入(Batch Insertion)
    嵌入式(Embedded)Neo4j数据库访问方法
    Neo4j 查询已经创建的索引与约束
    Neo4j 两种索引Legacy Index与Schema Index区别
    spring data jpa hibernate jpa 三者之间的关系
    maven web project打包为war包,目录结构的变化
    创建一个maven web project
    Linux下部署solrCloud
  • 原文地址:https://www.cnblogs.com/lidabo/p/3291786.html
Copyright © 2020-2023  润新知