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++类和资源
  • 相关阅读:
    Chrome Extension 扩展程序 小白入门
    gulp 打包报错:ReferenceError: internalBinding is not defined
    error in static/js/xxx.js from UglifyJs Unpected token: punc() [static/js/xxx.js]
    ES6-
    浏览器的渲染原理(转载)
    nodeType、nodeName和nodeValue
    浏览器 HTTP 协议缓存机制详解
    JS函数的上下文环境
    ready和onload的区别
    自定义事件
  • 原文地址:https://www.cnblogs.com/lidabo/p/3291786.html
Copyright © 2011-2022 走看看