面我们来介绍如何访问动态链接库中的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++类和资源

访问动态链接库中的C++类和资源的更多相关文章

  1. Spring源码分析——资源访问利器Resource之实现类分析

    今天来分析Spring的资源接口Resource的各个实现类.关于它的接口和抽象类,参见上一篇博文——Spring源码分析——资源访问利器Resource之接口和抽象类分析 一.文件系统资源 File ...

  2. Java中各种(类、方法、属性)访问修饰符与修饰符的说明

    类: 访问修饰符 修饰符 class 类名称 extends 父类名称 implement 接口名称 (访问修饰符与修饰符的位置可以互换) 访问修饰符 名称 说明 备注 public 可以被本项目的所 ...

  3. Java 访问限制符 在同一包中或在不同包中:使用类创建对象的权限 & 对象访问成员变量与方法的权限 & 继承的权限 & 深入理解protected权限

    一.实例成员与类成员 1. 当类的字节码被加载到内存, 类中类变量.类方法即被分配了相应内存空间.入口地址(所有对象共享). 2. 当该类创建对象后,类中实例变量被分配内存(不同对象的实例变量互不相同 ...

  4. “CObject::operator =”: 无法访问 private 成员(在“CObject”类中声明)

    c++工程编译报错: “CObject::operator =”: 无法访问 private 成员(在“CObject”类中声明) 错误无法直接定位源码位置,网上搜索了,也和我的代码不一样. 最后还是 ...

  5. 创建在类路径资源[applicationcontext]中定义名为“工厂”的bean时出错。:在设置bean属性“dataSource”时,无法解析对bean“dataSource”的引用;嵌套异常是org.springframe .beans.factory。BeanCreationException:创建名为“数据源”的bean时出错,该名称是在类路径资源[applicationcontext

    控制台报错: 创建在类路径资源[applicationcontext]中定义名为“工厂”的bean时出错.:在设置bean属性“dataSource”时,无法解析对bean“dataSource”的引 ...

  6. 【转载】LR - 细节解析,为什么LR脚本会去访问“脚本中不存在的“资源?

    问题描述 同事遇到的一个问题,LR执行性能测试脚本时,总报出错误,无法访问一个图片的地址,但脚本中明明没有对该资源的请求. Action4.c(12): Warning -27796: Failed ...

  7. org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException 前言中不允许有内容 来自类路径资源的XML文档中的第1行是无效的

    今天复习一下Spring和Hibernate的整合,遇到了一个问题,报错信息如下: org.springframework.beans.factory.xml.XmlBeanDefinitionSto ...

  8. springboot 项目中css js 等静态资源无法访问的问题

    目录 问题场景 问题分析 问题解决 问题场景 今天在开发一个springboot 项目的时候突然发现 css js 等静态资源竟然都报404找不到,折腾了好久终于把问题都解决了,决定写篇博客,纪录总结 ...

  9. spring中常用工具类介绍

    http://www.cnblogs.com/langtianya/p/3875103.html 文件资源操作     Spring 定义了一个 org.springframework.core.io ...

随机推荐

  1. 重读LPTHW-Lesson25

    1.ex25接触了字符串函数split().列表函数sorted().pop()函数,整理一下其用法以及其他常见的字符串.列表操作函数如下. (1)split()函数 split()是拆分字符串函数, ...

  2. C语言基础05

    二维数组的定义: 数据类型 数组名称 [ 常量表达式1 ] [ 常量表达式2 ] = {.....} int a[ 2 ][ 3 ] ={ {4,5,6}, {7,8,0},   //或者{7} 后面 ...

  3. MYSQL 转换字符集的 2 种方法

    方法 1. convert(expression using character_set); convert('123456789' using ascii); 方法 2. cast(expresio ...

  4. 【Xamarin 挖墙脚系列:Windows 10 一个包罗万象的系统平台】

    build2016 结束后,证实了微软之前的各种传言.当然,都是好消息. Windows10 上基本可以运行主流的任意的操作系统. Windows Linux(在内部版本143216中,支持了bash ...

  5. C++的四种cast操作符的区别--类型转换

    Q:什么是C风格转换?什么是static_cast, dynamic_cast 以及 reinterpret_cast?区别是什么?为什么要注意? A:转换的含义是通过改变一个变量的类型为别的类型从而 ...

  6. Google map v3 using simple tool file google.map.util.js v 1.1

    /** * GOOGLE地图开发使用工具 * @author BOONYACHENGDU@GMAIL.COM * @date 2013-08-23 * @notice 地图容器的z-index不能小于 ...

  7. [Leetcode][Python]42: Trapping Rain Water

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 42: Trapping Rain Waterhttps://oj.leetc ...

  8. INSERT INTO blog_appitem (user_id,appid,app_secret,is_valid) VALUES (1, 'wxf415741de036114c','48e1e345fd5f11c93af18ff1714c7f78',1)

    微信公众平台 INSERT INTO blog_appitem (user_id,appid,app_secret,is_valid) VALUES (1, 'wxf415741de036114c', ...

  9. ping网络故障

    网络的应用已渐渐深入我们的工作和生活,它带给了我们各方面的便利.因此,这种种的便利致使很多人对网络产生依赖性.那么,当电脑不能上网时,我们如何才能准确地判断电脑问题出在哪里?又如何能快捷地解决这故障? ...

  10. 连不上VSS 【转】

    今天打开项目,但是连不上VSS,报错如下: (一)现象: Could not find the Visual SourceSafe Internet Web Service connection in ...