DllMain加载其他DLL造成的死锁问题及其解决办法

使用VS 2008新建一个MFC ActiveX工程,因为在工程里要用到GDI+。我习惯把初始化GDI+库的代码放在应用程序类的InitInstance函数,对应的销毁代码放在ExitInstance函数。具体如下:

先在应用程序类里定义一个数据成员:

ULONG_PTR    m_gdiplusToken;

然后添加初始化GDI+库的代码和对应的销毁代码:

BOOL CImagePreviewXApp::InitInstance()

{

BOOL bInit = COleControlModule::InitInstance();

if (bInit)

{

// TODO: Add your own module initialization code here.

// Initialize GDI+ 的初始化代码,建议放在//InitInstance函数

GdiplusStartupInput gdiplusStartupInput;

GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);

}

return bInit;

}

// CImagePreviewXApp::ExitInstance - DLL termination

int CImagePreviewXApp::ExitInstance()

{

// TODO: Add your own module termination code here.

GdiplusShutdown(m_gdiplusToken);

return COleControlModule::ExitInstance();

}

结果在编译时老是出现一个问题,就是编译时输出窗口:

1>Embedding manifest...

1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1

1>Copyright (C) Microsoft Corporation. All rights reserved.

1>Registering output...

到了这里,VS 2008就像停滞一样,半天不反应,直到我取消生成。我以为是VS 2008bug,因为我用VS 2010编译这个工程并无这个现象(这个实在有点令人奇怪!)。到论坛一问,蒋晟大侠告知:在DllMain的封装函数InitInstance中有加载其他DLL造成了死锁。

怎么解决这个问题呢?一种方法是写两个接口函数分别实现初始化GDI+库和对应的销毁功能。我懒得写两个接口函数,干脆把这个工作放在ActiveX控件类(派生自COleControl的那个类)的构造函数和析构函数里。

DllMain加载其他DLL造成的死锁问题及其解决办法相关推荐

  1. Django 无法加载静态文件(js,css,image)解决办法

    Django 无法加载静态文件(js,css,image)解决办法 按照这个配置成功: https://jingyan.baidu.com/article/8cdccae92ffc16315413cd ...

  2. 中标麒麟操作系统,yum安装软件时提示:“已加载插件:langpacks,无须任何处理“的解决办法

    中标麒麟操作系统,yum安装软件时提示:"已加载插件:langpacks,无须任何处理"的解决办法 通常都是由于yum仓库未包含你所要安装的那款软件造成. 解决办法: 输入如下命令 ...

  3. ie加载项存在残留是什么_Win7系统遇到IE加载项故障的原因及两种解决办法

    在我们使用的系统中,都是有自带的IE浏览器,当然在我们使用的Win7系统中也不例外,可是在使用浏览器的过程中,也会出现各种各样的情况,在出现问题的时候就要看你怎样进行解决了.而最近就有用户反映,在IE ...

  4. openlayers加载百度地图作为底图坐标偏移的解决办法

    openlayers加载天地图作为底图,在网上找了公开的服务资源,要做到百度地图与天地图之间切换,同样也从网上找到百度地图的服务资源但是在地图上坐标总是有偏差,最初的代码是这样的: var proje ...

  5. Chrome浏览器无法加载已解压的.crx文件的解决办法

    1.找到crx文件,将.crx文件后缀名改为zip,并解压成文件夹 2.在扩展程序页面点击加载已解压的扩展程序,选择上面解压的文件夹,点击确定即可安装完成

  6. PyQt5加载png图片无法显示出透明度的解决办法

    参考链接 pyqt5设置按钮透明度 PyQt5 加载 png 图片无法显示出透明度 博文小记 一.问题描述 我在使用 QLabel 控件,用 QPixmap 加载 png 图片时,发现原先有透明度的图 ...

  7. 【uniapp】sigmob广告加载失败:-5005、500422没有imei的解决办法(原创可用)

    问题 最近打算将开发的uniapp应用对接uni-ad广告中去,在对接sigmob的时候出现了以下问题:①错误码==-5005==,查询了以下官方文档,发现是说我频繁调用,可是并没有,我是在真机上测试 ...

  8. DTP加载/ODS激活时持续黄灯的解决办法

    我比较幸运,两个问题都一起碰到了,还好下面两个方案帮到了我,拿出来和大家分享: 先说Activate的时候持续黄灯: Activation of M Records from DataStore Ob ...

  9. 错误:找不到或无法加载主类 X.X.X.Application,解决办法

    一般出现这个情况需要重新编译可以解决百分之九十的问题. 在Terminal控制台分别执行以下命令: mvn clean compile mvn install

最新文章

  1. FhqTreap的区间翻转
  2. linux shell 执行 几种方式区别 bash source .
  3. MySQL下载以及安装【windows】
  4. Linux(RHEL7及CentOS7)下glibc版MySQL5.7.20的安装
  5. python导出csv不带引号的句子_不带双引号写入CSV文件
  6. 位bit、字节byte、kb、mb
  7. ubuntu - 14.04,如何操作Gnome的任务栏?
  8. (52)多路时钟复用FPGA如何约束一(片外时钟复用约束)
  9. 中国内置扬声器市场趋势报告、技术动态创新及市场预测
  10. java 外观模式_Java设计模式11:外观模式
  11. 【 HDU1081 】 To The Max (最大子矩阵和)
  12. DirectX版本问题
  13. 电脑桌面天气计算机备忘录,有什么桌面软件可以显示:时间,天气,还有备忘录的?...
  14. Android开发中需要用到的常见APP对应包名
  15. 测试用例之场景法设计
  16. Android中m、mm、mmm、mma、mmma的区别
  17. (zhuan)富文本 Attributes 下划线、删除线等
  18. 学习OpenCV:滤镜系列(8)——素描
  19. Numpy.array()详解 、np.array与np.asarray辨析、 np.array和np.ndarry的区别
  20. 《微观经济学》 第八章

热门文章

  1. Protocol Buffers C++ 入门教程
  2. 多核程序设计的相关基础知识----以误差扩散算法为例
  3. (转)iOS 常用宏定义
  4. DropDownList如何绑定DataTable,如何绑定DataSet
  5. thymeleaf的url属性
  6. 公众服务常用电话号码大全
  7. Spring字段注入
  8. 示例演示公告通知标题无缝向上滚动,文字段落无缝向上滚动,简单的wangeditor富文本编辑器,简单的音乐播放demo...
  9. ITU-T Technical Paper: 测量QoS的基本网络模型
  10. java核心知识点学习----多线程间的数据共享的几种实现方式比较