cef内核最近使用的体会低版本vs编译下载嵌入的体会

news2024/11/29 8:37:25

文章目录

  • 前言
  • 1、cef简介和下载编译
      • 2、嵌入到工程框架中遇到的问题
  • 3、VisualStudio2017、2019编译
  • 4、如何使用编译好的库以及相关动态文件
  • 5、注意
  • 6、常见问题
  • 7、cef的通信及同步调用JS

前言

最近一段时间忙着把浏览器内核框架中的cef框架更新到新版本,以及最近对于cef内核的理解。

1、cef简介和下载编译

CEF全称是Chromium Embedded Framework,它是Chromium的Content API的封装库。

CEF官网地址:https://bitbucket.org/chromiumembedded/cef
CEF官方论坛:http://www.magpcss.org/ceforum
CEFSharp:https://github.com/cefsharp/CefSharp
ChromiumFX,.NET bindings for the Chromium Embedded Framework.: https://bitbucket.org/chromiumfx/chromiumfx

其中我是在这个地址下载的:https://cef-builds.spotifycdn.com/index.html#windows32
在这里插入图片描述
下载的版本:05/26/2016 - 3.2704.1414.g185cd6c / Chromium 51.0.2704.47STABLE,下载地址:https://cef-builds.spotifycdn.com/cef_binary_3.2704.1414.g185cd6c_windows32.tar.bz2。
Google Code上倒是可以下载,但是是老的版本,2012年的: Google Code chromiu
membedded
在这里插入图片描述

但是好处是有vs2005、vs2008、vs2010版本的sln,不需要使用CMake转换。

下载好完整目录结构如下:
在这里插入图片描述
其中包括了CMakeLists.txt,其中使用低版本vs例如vs2008还要额外增加一个stdint.h就可以。
在这里插入图片描述
其中使用cmake配置编译完成如下结构:
在这里插入图片描述
例如这个cefclient工程运行出来cefclient.exe。
在这里插入图片描述

2、嵌入到工程框架中遇到的问题

当关闭相关浏览器时候碰到调用这个接口崩溃现象:

bool CefV8ValueCToCpp::GetKeys(std::vector<CefString>& keys) {
  cef_v8value_t* _struct = GetStruct();
  if (CEF_MEMBER_MISSING(_struct, get_keys))
    return false;

  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING

  // Translate param: keys; type: string_vec_byref
  cef_string_list_t keysList = cef_string_list_alloc();
  DCHECK(keysList);
  if (keysList)
    transfer_string_list_contents(keys, keysList);

  // Execute
  int _retval = _struct->get_keys(_struct,
      keysList);

  // Restore param:keys; type: string_vec_byref
  if (keysList) {
    keys.clear();
    transfer_string_list_contents(keysList, keys);
    cef_string_list_free(keysList);
  }

  // Return type: bool
  return _retval?true:false;
}

首先打开微博三方接入url如下:
在这里插入图片描述
跳转到密码登录界面:
在这里插入图片描述
这个时候点击右上角关闭导致析构时间调用GetKey接口出现问题,先注释就可以。这个问题得后续继续排查。

3、VisualStudio2017、2019编译

VisualStudio2017、2019编译非常快速,使用CMake对cef_binary_3.3578.1860.g36610bd_windows32创建build项目,创建成功后只编译libcef_dll_wrapper即可,其他lib和资源使用编译好的即可。

2021年3月3日,以下载 cef_binary_88.2.9+g5c8711a+chromium-88.0.4324.182_windows32_minimal 为例,使用CMake-gui转换,默认是64位版本(如果需要使用32位版本,转换的时候注意选择Win32),转换后的vs工程默认就是Unicode字符集MTd(MT)的,直接编译libcef_dll_wrapper即可,生成的lib拷走,其他的lib直接使用现成的。

4、如何使用编译好的库以及相关动态文件

经测试主程序目录下须携带以下文件:

libcef.dll
chrome_elf.dll
icudtl.dat
v8_context_snapshot.bin
cef.pak
cef_extensions.pak
cef_200_percent.pak
cef_100_percent.pak

如果主程序运行仍然出错,可能就是资源文件没有配齐,可以再复制一些cef的资源文件进去试试。
在这里插入图片描述

5、注意

尽量链接release版本的,要链接:libcef.lib、cef_sandbox.lib、libcef_dll_wrapper
字符串要传递的时候,需转换为Unicode,可使用std::wstring转换,注意使用CStringW转换可能会有问题。
VisitDOM只能在render进程中使用,无法在browser进程中使用。

6、常见问题

cefinitialize崩溃:说明exe执行路径下缺少相关文件导致初始化失败,可以把Resources目录下的locales文件夹、icudtl.dat、cef*.pak等文件复制过来。
base::Bind not found:解决办法:修改为base::BindOnce,会提示找不到OnceCallback,需要在cef_bind.h头文件中添加对cef_callback.h文件的包含,这个太坑了。

7、cef的通信及同步调用JS

。。。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1847970.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

rttys服务器和客户端

rttys服务器 1.下载 https://github.com/zhaojh329/rttys/releases2.解压运行 libev交叉编译 cd libev ./configure --hostarm-linux CCaarch64-poky-linux-gcc --prefix/home/michael/rtty_install make install DESTDIR/home/michael/rtty_installrtty客户端 1.git地…

python测试工程师 之 unittest框架总结

unittest 学习目标unittest 框架的基本使⽤⽅法(组成)断⾔的使⽤ (让程序⾃动的判断预期结果和实际结果是否相符)参数化(多个测试数据, 测试代码写⼀份 传参)⽣成测试报告 复习pythonunittest 框架的介绍核⼼要素(组成)1. TestCase 测试⽤例, 这个测试⽤例是 unittest 的组成部…

2024亚马逊Prime Day备战攻略:卖家要做好这些准备!

2024年的Prime Day是亚马逊的第十个会员日&#xff0c;对卖家而言&#xff0c;Prime Day不仅仅是一次简单的促销活动&#xff0c;更是一个可以提升销售业绩、增强品牌影响力并加深与消费者关系的黄金机会。肯定还有不少卖家在为活动做准备&#xff0c;今天就为大家准备了一份全…

奔驰EQS SUV升级原厂主动式氛围灯效果展示

以下是一篇关于奔驰 EQs 升级原厂主动氛围灯案例的宣传文案&#xff1a; 在汽车科技不断演进的今天&#xff0c;我们自豪地为您呈现奔驰 EQs 升级原厂主动氛围灯的精彩案例。 奔驰 EQs&#xff0c;作为豪华电动汽车的典范&#xff0c;其卓越品质与高端性能有目共睹。而此次升…

ADC + 数码管显示

REVIEW 前面已经学习过&#xff1a; ADC&#xff1a;ADC模-数转换原理与实现-CSDN博客 key&#xff1a;基于状态机的按键消抖实现-CSDN博客 数码管&#xff1a;SPI接口的74HC595驱动数码管实现_用spi和hc74595通信-CSDN博客 1. 今日摸鱼计划 按键启动ADC 将结果显示在数码管…

Reddit、Discord等社媒网站抓取总结:如何更高效实现网页抓取?

有效的网络抓取需要采取战略方法来克服挑战并确保最佳数据提取。让我们深入研究一些关键实践&#xff0c;这些实践将使您能够掌握复杂的网络抓取。 一、了解 Web 抓取检测 在深入探讨最佳实践之前&#xff0c;让我们先了解一下网站如何识别和抵御网络爬虫。了解您在这一过程中…

2024.6.23周报

目录 摘要 ABSTRACT 一、文献阅读 一、题目 二、摘要 三、网络架构 四、创新点 五、文章解读 1、Introduction 2、Method 3、实验 4、结论 二、代码实验 总结 摘要 本周阅读了一篇题目为NAS-PINN: NEURAL ARCHITECTURE SEARCH-GUIDED PHYSICS-INFORMED NEURAL N…

【vLLM】核心技术PagedAttention,调度原理

vLLM 简介 来自加州大学伯克利分校、斯坦福大学、加州大学圣迭戈分校的研究人员基于操作系统中经典的虚拟(Virtual)内存和分页(Page)技术&#xff0c;提出了一个新的注意力算法 PagedAttention&#xff0c;并打造了一个LLM服务系统——vLLM&#xff0c;官网为&#xff1a;http…

OS复习笔记ch11-4

磁盘调度 磁盘的物理结构 经典的温彻斯特盘 其中的几个概念&#xff1a; 盘面&#xff1a;可以看成是一个操场的平面&#xff0c;不同的盘面通过中间的轴串在一起磁道&#xff1a;磁道可以看成是操场的跑道&#xff0c;我们知道操场上有外道和内道&#xff0c;最内道中间往…

【FlowShop流水线作业排班问题【数学规划的应用(含代码)】阿里达摩院MindOpt】

本文主要讲述使用MindOpt工具优化FlowShop流水线作业排班的数学规划问题。 一、案例场景 FlowShop流水线作业排班也有称为生产下料问题&#xff0c;它涉及到多台机器、多个工序以及多个作业调度安排。在这个问题中&#xff0c;我们需要对多个作业在一组流水线上的处理顺序进行…

矩阵中严格递增的单元格数

题目链接&#xff1a;leetcode:矩阵中严格递增的单元格数 描述 给你一个下标从 1 开始、大小为 m x n 的整数矩阵 mat&#xff0c;你可以选择任一单元格作为 起始单元格 。 从起始单元格出发&#xff0c;你可以移动到 同一行或同一列 中的任何其他单元格&#xff0c;但前提是目…

修复kazam意外中断的视频文件

0. Problem 在用kazam录视频的过程中&#xff0c;PC意外重启了&#xff0c;然后kazam没有把文件自动转换成MP4&#xff0c;而是存为以下两个文件&#xff1a; kazam_xxxxx.movie kazam-xxxxx.movie.mux这两个文件一个0k&#xff0c;另一个是有size的&#xff0c;但是没办法直…

[SAP ABAP] 变量与常量

1.变量 定义变量的基本方式 DATA <name> TYPE <type> [VALUE <val>]. <name>&#xff1a;指定变量的名称 <type>&#xff1a;指定变量的数据类型 <val>&#xff1a;指定<name>的初始值 示例1 定义变量lv_data1和lv_data3 输出结果…

【CMake】CMake从入门到实战系列(十七)—— CMake添加环境检查

&#x1f525;博客简介&#xff1a;开了几个专栏&#xff0c;针对 Linux 和 rtos 系统&#xff0c;嵌入式开发和音视频开发&#xff0c;结合多年工作经验&#xff0c;跟大家分享交流嵌入式软硬件技术、音视频技术的干货。   ✍️系列专栏&#xff1a;C/C、Linux、rtos、嵌入式…

【C语言】16.动态内存管理

文章目录 1.为什么要有动态内存分配2.malloc和free2.1 malloc2.2 free 3.calloc和realloc3.1 calloc3.2 realloc 4.常见的动态内存的错误4.1 对NULL指针的解引⽤操作4.2 对动态开辟空间的越界访问4.3 对⾮动态开辟内存使⽤free释放4.4 使⽤free释放⼀块动态开辟内存的⼀部分4.5…

redis高可用-集群部署

一&#xff1a;背景 前面我们实现了redis的主从同步和哨兵模式&#xff0c;解决了单机redis的故障转移和流量分担&#xff0c;但是不管是主从或者哨兵模式都是一个主服务对应一个或者多个从服务&#xff0c;并且主服务和从服务的数据是一样的&#xff0c;这样就实现不了redis大…

JSP基础知识概述

目录 JSP一、什么是JSP1.1 概念1.2 创建JSP1.3 JSP编写Java代码1.4 JSP实现原理 二、JSP与HTML集成2.1 普通脚本2.2 声明脚本2.3 输出脚本2.4 JSP指令2.5 动作标签 三、内置对象3.1 四大域对象 JSP 一、什么是JSP 1.1 概念 简化的Servlet设计&#xff0c;在HTMl标签中嵌套Jav…

Python学习打卡:day12

day12 笔记来源于&#xff1a;黑马程序员python教程&#xff0c;8天python从入门到精通&#xff0c;学python看这套就够了 目录 day1292、全国疫情地图构建数据整理获取数据数据整体结构&#xff08;全国&#xff09;省数据结构获取每个省份的确诊数据上述代码执行后输出&…

Homebrew使用

官网&#xff1a;https://brew.sh/ 安装&#xff1a; 简介&#xff1a;https://www.jianshu.com/p/f4c9cf0733ea 比如&#xff0c;安装maven: 1、brew install maven 2、查看安装路径&#xff1a;brew list maven 具体参考&#xff1a;https://blog.csdn.net/m0_67402970/arti…

创业众筹网

摘 要 创业是社会经济发展的重要动力&#xff0c;其在任何经济发展时期任何国家都最具活力与桃战性。然而创业的资金却是90%创业者面临的首要问题。包括积蓄不足、无不动产、负债、不知如何向银行申贷,及无法预估所创行业之总资金、成本。部分创业者虽然有心创业&#xff0c;但…