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_hResourceZip;
static short m_H;
static short m_S;

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

被折叠的 条评论
为什么被折叠?



