duilib 同一个进程多个DLL使用问题

本文讨论了在使用duilib库时遇到的多DLL环境下导致的界面无法正常启动的问题。作者分析了由于CPaintManagerUI类中的静态变量导致的冲突,并提出了不修改原代码的解决方案,即为每个模块的DLL使用单独命名的duilib DLL。此外,还提到了duilib中visit默认为false可能导致窗口不显示的细节,以及MFC与duilib结合时需要注意的句柄管理和对象分配问题。
摘要由CSDN通过智能技术生成

duilib库自己现在用的蛮舒服的,全部的代码自己也看几遍,对自己开发UI帮助蛮多。duilib一个小巧的directui库,基本满足能大部分开发。虽然有一些BUG,但不影响开发,只要自己明白的他的库原理其他就容易了。

自己开发当中时候为了使模块更加模块话,我直接把界面和业务封装在一个DLL里面,资源都放在压缩包里面并做为DLL的资源。对外只提供接口,就算需求变化了,要修改界面,但对外面来说,接口不变,他们什么都知道,这样降低耦合性。但项目开发当中发现我启动一个用DUILIB模块界面后,前面界面关闭不关闭后面你要启动另一个DUILIB写的DLL里面的界面,你会发现根本启动不了,过了一会就调试一个ASSERT(pRoot) 的诊断报错。我觉得很奇怪,我以前用MFC这样开发时候没有发现这样的问题。觉得一点的不科学。后面想到一个进程公用一个DLL,一个进程中内存是一样的。所以猜测用了全部变量。

自己后来分析Core里面 CPaintManagerUI ,里面有大量的类的静态变量,显然对应CPaintManagerUI  所有的实例是公用的。

  static HINSTANCE m_hInstance;
    static HINSTANCE m_hResourceInstance;
    static CDuiString m_pStrResourcePath;
    static CDuiString m_pStrResourceZip;
    static bool m_bCachedResourceZip;
    static HANDLE m_hR

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值