Duilib调用CEF3封装的控件,14001和显示的时候白屏

最近研究CEF遇到两个很奇怪的问题:1、调用dll总是显示14001错误;2、CEF白屏。

 第一个问题场景:把CEF3作为控件封装到一个静态库里面去,运行的时候是需要另外一个动态库调用封装好的cef控件,然后一个exe调用动态库,调用的时候总是loadlibrary失败,GetLastError为14001。

        该问题出现的原因是cef两个关键的库,其中一个libcef_dll_wrapper.lib是一个静态库,当我用静态库加载静态库的时候,实际只是把链接加载进去了,实际调用的时候又需要dll去加载包裹的静态库,这时候应该是找不到libcef_dll_wrapper.lib库的,所以报错。具体原因没有详细去探讨,有时间再去研究。

        解决第一个问题的方法,把CEF封装为一个单独的动态库就解决了。接着又遇到第二个问题了,放到工程里面运行起来之后,弹出带有cef控件的界面,白屏。心酸。

        这个问题在网上找了很久,网上列举的原因大致有这么几点,可以自行对照当前的情况去试验:

        1、资源文件没有加载全,比如有一些必须的dll和资源如下图:

这个是必须要的,作为一个老选手,这个我是没问题的。

        2、有的说是需要加载两个.manifest文件,这个我也试过,不是我问题的所在,我的是VS2017,CEF版本是

不存在这种问题,事实证明我不加载.manifest文件也是正常的。

        3.有人说CEF初始化需要放到其他实例的前面,这个给了我很大的启发。我的就是这个问题堵住了。主要原因我也找到了。如果CEF初始化的时候single_process属性没有设置或者设置的false,是多进程模式,多进程模式在显示cef控件的时候需要两次进入dll,但是我的工程有个互斥量控制只能启动一个实例,把第二次进入dll的操作给拦截了,所以渲染进程启动不起来,所以白屏。解决方法是single_process设置为true,初始化cef,这样就是渲染和浏览器在一个进程,但是官方说明说这种方式不太稳定。另外的方法就是去掉限制两次重入dll的互斥量喽。

        4.如果窗口设置的透明也会显示不出来CEF控件。

      有需要帮助的可以联系qq 295282563

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
CEF是指Chromium Embedded Framework,是一种集成了谷歌浏览器的开源框架。当CEF的内存增加时,可能会导致白屏问题。 白屏问题可能由多种原因引起,其中之一就是CEF的内存增加。当CEF的内存使用量变得过高时,可能会导致页面无法正常加载,显示为空白。 CEF的内存增加可能由以下因素引起: 1. 内存泄漏:当CEF的页面或资源无法正确释放时,内存会逐渐增加,最终导致白屏问题。 2. 页面负载过大:某些网页或应用程序可能会加载大量的内容,包括图像、脚本和视频等,这些内容需要大量的内存来进行处理和展示,当内存不足时,可能导致页面无法正常加载。 3. 扩展或插件问题:某些扩展或插件可能存在内存管理问题,当这些扩展或插件使用CEF时,可能会导致CEF的内存增加。 解决CEF内存增加导致的白屏问题,可以尝试以下方法: 1. 更新CEF版本:新版本的CEF通常会修复一些内存管理方面的问题,升级到最新版本可能能够解决问题。 2. 优化页面资源:检查网页资源使用情况,尽量减少不必要的资源加载,例如压缩图像和脚本文件,优化视频播放等。 3. 移除或禁用问题扩展或插件:检查已安装的扩展或插件,如果发现有问题的,可以尝试移除或禁用它们。 4. 定期清理CEF缓存:定期清理CEF的缓存文件和临时文件,可以释放一些内存空间。 总之,当CEF的内存增加时,可能会导致白屏问题。通过更新CEF版本、优化页面资源、移除问题扩展或插件以及定期清理CEF缓存,可以尝试解决这个问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值