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基础之入门
    C#直接删除指定目录下的所有文件及文件夹(保留目录)
    删除Oracle文件、注册表
    WinRAR 激活码(KEY)
    用C#读取txt文件的方法(转)
    c# 生成 xml 文件
    Asp.Net 文件下载1——流下载(适用于大文件且防盗链)(转)
    Asp.Net异常:"由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值"的解决方法
    响应在此上下文中不可用 asp.net
    Ajax实现局部刷新
  • 原文地址:https://www.cnblogs.com/lidabo/p/3291786.html
Copyright © 2011-2022 走看看