CEF一些基本知识

article/2025/11/7 12:22:58

一.CEF简介

Chromium Embedded Framework (CEF)是个基于Google Chromium项目的开源Web browser控件,支持Windows, Linux, Mac平台。

简单说就是Chrome的开源版,目前很多所谓的双核浏览器,实质就是chrome+IE的双核。基于HTML5的支持,以及v8引擎的效率,在软

件中嵌入chromium是个不错的选择,而且目前市面上应用及其广泛,如:tx系软件。spy++一抓就知道了,如下图


二.cef下载

http://opensource.spotify.com/cefbuilds/index.html下载速度是不快,但总算下载下来了,由于本人是vs2013,遇到的坑就是3.3以上的版本至少要vs2015以上才

能编译,总之搞了很久最后下了一个3.27版本才成功,提示:如果不打算放弃32位就建议下载32位版本吧,不然64位软件在32位系统是跑不起来的。

由于新下载的标准开发包解压就是如下图了,


文件目录结构在此做下说明,很是重要。笔者在此花费了很多时间。

1.首先建议先阅读Readme.txt,该文件对项目结构做了简要说明。当然看一遍肯定不可能完全理解。但随着对项目的熟悉了解,

发现该文件说的还是挺清晰的。

2.licence.txt没啥说的,就是关于版权的说明。

几个gyp/gypi文件是不能手动修改的,是GYP(Generate Your Projects)工具自动生成的相当于工程配置文件。插入一段GYP说明:

[plain] view plain copy
print ?
  1. GYP结构  
  2. GYP的输入是.gyp和.gypi文件,.gypi文件是用于.gyp文件include使用的。.gyp文件就是符合特定格式的json文件。  
  3. gyp文件中包含target,Visual C++下,gyp生成sln,target生成vcproj或vxcproj。  
  4. chromium中GYP结构是,通过命令行统一使用build/common.gypi的公共文件,工程的配置,选项的处理,编译选项的使用,都是在这个文件中配置。  
GYP结构
GYP的输入是.gyp和.gypi文件,.gypi文件是用于.gyp文件include使用的。.gyp文件就是符合特定格式的json文件。
gyp文件中包含target,Visual C++下,gyp生成sln,target生成vcproj或vxcproj。
chromium中GYP结构是,通过命令行统一使用build/common.gypi的公共文件,工程的配置,选项的处理,编译选项的使用,都是在这个文件中配置。
[plain] view plain copy
print ?
  1. 生成一个总工程all.gyp,这个工程依赖于其他所有的工程,这个工程生成,所有工程都生成完成。而且有一个总工程也方便开发。  
  2. 如果要使用GYP,建议依照chromium的结构,common.gypi也用chromium的进行裁剪,毕竟各种选项的选择也是需要经验的。  
  3.       
生成一个总工程all.gyp,这个工程依赖于其他所有的工程,这个工程生成,所有工程都生成完成。而且有一个总工程也方便开发。
如果要使用GYP,建议依照chromium的结构,common.gypi也用chromium的进行裁剪,毕竟各种选项的选择也是需要经验的。
[plain] view plain copy
print ?
  1. 使用GYP  
  2. chromium工程中的方法是使用build/gyp_chromium这个Python脚本来调用,这个脚本实现添加公共配置,侦测附加配置,添加需要的编译选项。  
使用GYP
chromium工程中的方法是使用build/gyp_chromium这个Python脚本来调用,这个脚本实现添加公共配置,侦测附加配置,添加需要的编译选项。

3.然后就是介绍CMakeList.txt文件了,该文件非常重要。这里要引入CMake的一些知识,下载地址:

CMake下载地址

CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(目前很多开源跨平台库都使用此方式如:ProtoBuf,cef)。

CMake脚本本文不做介绍,由于当前用的win平台所以直接下载免安装版解压运行cmake-gui.exe,(说句废话,这是一个qt程序,

跨平台还是选择了qt,呵呵)。


需要注意的就是源代码目录和生成工程文件的目录了,configue没错误就Generate生成相应vs版本工程文件,然后OpenProject,

正常情况就是所有的项目(包括库和测试程序)都包含在这个工程中。

libcef_dll_wrapper会生成一个库,cefclient和cefsimple则会生成测试程序,对应下面两张图。


4.文件夹介绍

(1)cmake,该文件夹包含Cmake的一些宏定义,配置信息。

(2)include,使用该库的所有头文件

(3)libcef_dll,库的源代码

(4)tests,测试程序demo源代码

(5)Resource,资源文件

该资源文件是程序运行需要依赖的资源文件,含语言包,unicode支持等

(6)Debug/Release,程序依赖的动态库/静态库。但不包括C++库:libcef_dll_wrapper.lib。

1、必须文件,缺少任意一个CEF将无法运行:
libcef.dll
    这个不用多说,CEF的核心库文件,js引擎、网页加载渲染逻辑等都在其中,也是size最大的一个文件(Release版将近50M,Debug版超过500M)。
icudtl.dat 
    用来支持unicode,缺少这些文件虽然编译能通过,但是执行CefInitialize();的时候就会崩溃,在这个坑趴了很久还以为是代码问题。
natives_blob.bin
snapshot_blob.bin

    V8引擎快照数据。
2、可选文件:
locales/
    该目录包含CEF,Chromium和Blink使用的本地化资源。 CefSettings.locale指定需要加载的.pak文件。 只需要发布配置的区域对应的.pak文件。

如果没有区域设置将配置默认语言环境“en-US”。如果没有这些文件任意Web组件可能显示不正确。
cef.pak
cef_100_percent.pak
cef_200_percent.pak

    这些文件包含了供CEF使用的区域无关资源,缺少这些文件任意Web组件可能显示不正确。(笔者当时缺少cef_100_percent.pak

cef_200_percent.pak两文件,导致视频控件不显示音量和最大化按钮)。
cef_extensions.pak
    此文件包含扩展加载所需的非本地化资源传递`--disable-extensions`命令行标志来禁止使用文件。没有这个文件,依赖于扩展系统的组件将不起作用,

如PDF查看器。
devtools_resources.pak
    此文件包含Chrome开发者工具所需的非本地化资源,缺少这个文件,Chrome开发者工具将无法运行。
d3dcompiler_43.dll (Windows XP需要该文件)
d3dcompiler_47.dll (Windows Vista和更高版本的系统需要该文件)
libEGL.dll
libGLESv2.dll

    Direct3D支持文件,如果缺少这些文件,HTML5在渲染2D画布,3D CSS,WebGL时将不起作用。
wow_helper.exe
    用来支持Windows Vista 64位沙箱。如果没有这个文件,32位的CEF将无法在开启了沙箱的64位的Vista机器上运行。

英文原文


附MFC使用CEF3简单Demo代码

[cpp] view plain copy
print ?
  1. BOOL CMFCDlgCefTestDlg::OnInitDialog()  
  2. {  
  3.     CDialogEx::OnInitDialog();  
  4.   
  5.     // TODO:  在此添加额外的初始化代码  
  6.     CefRefPtr<CSimpleClient> client(new CSimpleClient());  
  7.     m_simpleClient = client;  
  8.   
  9.     CefSettings settings;  
  10.     CefSettingsTraits::init(&settings);  
  11.     settings.multi_threaded_message_loop = true;  
  12.   
  13.     CefMainArgs mainArgs;  
  14.     CefRefPtr<CefApp> cefApp;  
  15.     CefInitialize(mainArgs, settings, cefApp, NULL);  
  16.   
  17.     RECT rect;  
  18.     GetClientRect(&rect);  
  19.     RECT rectnew = rect;  
  20.     CefWindowInfo winInfo;  
  21.     winInfo.SetAsChild(GetSafeHwnd(), rectnew);  
  22.   
  23.     CefBrowserSettings browserSettings;  
  24.     CefBrowserHost::CreateBrowser(winInfo, client, _T("http://www.lofter.com"), browserSettings, NULL);  
  25.   
  26.     return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE  
  27. }  
BOOL CMFCDlgCefTestDlg::OnInitDialog()
{CDialogEx::OnInitDialog();
// TODO:  在此添加额外的初始化代码
CefRefPtr&lt;CSimpleClient&gt; client(new CSimpleClient());
m_simpleClient = client;CefSettings settings;
CefSettingsTraits::init(&amp;settings);
settings.multi_threaded_message_loop = true;CefMainArgs mainArgs;
CefRefPtr&lt;CefApp&gt; cefApp;
CefInitialize(mainArgs, settings, cefApp, NULL);RECT rect;
GetClientRect(&amp;rect);
RECT rectnew = rect;
CefWindowInfo winInfo;
winInfo.SetAsChild(GetSafeHwnd(), rectnew);CefBrowserSettings browserSettings;
CefBrowserHost::CreateBrowser(winInfo, client, _T("http://www.lofter.com"), browserSettings, NULL);return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE

}

[cpp] view plain copy
print ?
  1. void CMFCDlgCefTestDlg::OnClose()  
  2. {  
  3. <span style=“white-space:pre;”> </span>// TODO:  在此添加消息处理程序代码和/或调用默认值  
  4. <span style=“white-space:pre;”> </span>m_simpleClient->Release();  
  5. <span style=“white-space:pre;”> </span>CefShutdown();<span style=“color:#ff0000;”>//其实这行代码如果没有设置cefApp的话,是会崩溃的,测试完全可以注释。但切记,该函数只能在主线程中调用。后续深入学习后,还需解一下惑</span>  
  6. <span style=“white-space:pre;”> </span>CDialogEx::OnClose();  
  7. }  
void CMFCDlgCefTestDlg::OnClose()
{
// TODO:  在此添加消息处理程序代码和/或调用默认值
m_simpleClient->Release();
CefShutdown();//其实这行代码如果没有设置cefApp的话,是会崩溃的,测试完全可以注释。但切记,该函数只能在主线程中调用。后续深入学习后,还需解一下惑
CDialogEx::OnClose();
}



推荐一个不错的文档地址:

github文档

csdn下载

CEF从chromium源代码编译请点我参考

转载自:https://blog.csdn.net/evil_119/article/details/78751310


http://chatgpt.dhexx.cn/article/EZvfKi5i.shtml

相关文章

CEF环境编译

文章目录 前言龙芯-CEF用户使用手册Tutorial源码入口函数编译步骤最后 前言 Chromium Embedded Framework (CEF) 官方镜像。 一个简单的框架&#xff0c;用于将基于 Chromium 的浏览器嵌入到其他应用程序中。 CEF仓库&#xff1a;chromiumembedded/cef 二进制CEF: CEF Autom…

CEM和BBHE

逆光图像处理 CEMBBHE代码CEMBBHE 今天又了解到了两种对亮度处理的方法。分别是CEM和BBHE。 参考: CEM_matlab. BBHE_matlab. BBHE_C. CEM 单纯的CEM公式比较简单&#xff0c;原理和公式如下 根据网上一个matlab程序复写了一遍python的&#xff0c;灰度图是有效果的。彩色…

模拟生成高斯噪声

之前有做过在图像上加高斯噪声的实验&#xff0c;在模拟生成随机数&#xff0c;以及产生高斯分布噪声时&#xff0c;受到了一些干扰。尤其是和高斯模糊相混淆。对于初学者来说&#xff0c;这些虽然是一些基本的图像处理知识&#xff0c;但是&#xff0c;眼高手低是很要不得的。…

CSS实现高斯模糊效果

用CSS实现高斯模糊效果&#xff1a;filter、backdrop-filter 高斯模糊是一种常见的效果&#xff08;俗称毛玻璃效果&#xff09;&#xff0c;在CSS中使用filter、backdrop-filter属性均可实现 一、filter 这其实是一种“假”模糊&#xff0c;需要一层做背景并使用filter属性达到…

(三)对图像进行Gauss高斯平滑处理

对图像进行Gauss高斯平滑处理 平滑滤波 图像在采集、传输和转换过程中都容易受环境的影响&#xff0c;这在图像中就表现为噪声&#xff0c;这些噪声会致使图像质量降低或者干扰我们提取原本想要的图像信息&#xff0c;所以需要通过滤波技术来去除这些图像中的噪声干扰。 常见…

高斯白噪声(white Gaussian noise,WGN)及matlab演示

原文链接&#xff1a;http://wenku.baidu.com/link?urlmj_wz_9l7PAlURQYi1iOnTnweMxyPvoTWGgoIQdCh2v0Yugt7v_G9QsUkS6Ww-ro2VhJ3L9rsE9kqhqX1V-3TlLNeZdcx_zrLlzZBBIhgqK 文库上看到的一片文章&#xff0c;讲的非常清晰明了&#xff0c;我等渣渣不得不转啊。 本文科普一下高斯…

高斯平滑 高斯模糊 高斯濾波器 ( Gaussian Smoothing, Gaussian Blur, Gaussian Filter ) C++ 實現

http://blog.csdn.net/cay22/article/details/5546636 高斯平滑 高斯模糊 高斯濾波器 ( Gaussian Smoothing, Gaussian Blur, Gaussian Filter ) C 實現 在之前提到過了均值濾波器, 就是說某像素的顏色, 由以其為中心的九宮格的像素平均值來決定. 在這個基礎上又發展成了帶權的…

高斯玻色采样enhance量子近似优化算法

上篇博文&#xff0c;我们已经接触了QAOA量子近似优化算法&#xff0c;我们已经知道近似优化算法一般用于求解组合优化问题。这里我们再说明一下什么是组合优化问题&#xff1a; 给定一个数据集 X &#xff5b; x 1 , x 2 , . . . x N &#xff5d; X&#xff5b;{x_{1},x_{2…

matlab 绘制高斯(Gaussan)函数图像

高斯函数如下&#xff1a; G a u s s a n 1 2 π σ e − ( x − μ ) 2 2 σ 2 Gaussan \frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x-\mu)^2}{2\sigma^2}} Gaussan2π ​σ1​e−2σ2(x−μ)2​ 使用 MATLAB 编写高斯函数&#xff0c;需传入 x , μ , σ x,\mu,\sigma x,μ,…

高斯平滑滤波器(Gaussian Smoothing Filter)

一、图像滤波的基本概念 图像常常被强度随机信号&#xff08;也称为噪声&#xff09;所污染。一些常见的噪声有椒盐&#xff08;Salt & Pepper&#xff09;噪声、脉冲噪声、高斯噪声等。椒盐噪声含有随机出现的黑白强度值&#xff0e;而脉冲噪声则只含有随机的白强度值&am…

高斯滤波(Gauss filtering)

1.概念介绍 高斯滤波是一种线性平滑滤波&#xff0c;适用于消除高斯噪声&#xff0c;广泛应用于图像处理的减噪过程。  通俗的讲&#xff0c;高斯滤波就是对整幅图像进行加权平均的过程&#xff0c;每一个像素点的值&#xff0c;都由其本身和邻域内的其他像素值经过加权平均后…

Matlab_用高斯赛德尔(Gaoss-Seidel)迭代法解线性方程组

1.程序代码 function xGauss(A,b,x0,ep,N) %用途&#xff1a;用高斯迭代法解线性方程组Axb %A为系数矩阵&#xff0c;b为右端向量&#xff0c;x0为初始向量&#xff08;默认零向量&#xff09; %ep为精度&#xff08;1e-6&#xff09;&#xff0c;N为最大迭代次数&#xff…

gaussian_filter( )函数(高斯滤波)

对一个数进行高斯滤波&#xff08;模糊&#xff09;可以理解成将该数取附近矩形窗口所有值的加权平均值&#xff0c;距离处理数越近的点权重越大&#xff0c;距离处理点越远的点权重越小。因此如果取的矩形窗口越大&#xff0c;那么对处理点的模糊效果越强烈。 上图&#xff0c…

Gauss-Seidel迭代法的C++实现

高斯赛德尔迭代法大家可以从网站上找到相关的公式推导&#xff0c;这里给出它的C算法实现和运行的结果。 #include<iostream> #include<math.h> using namespace std;int n; //定义全局变量 double a[100…

高斯平滑

&#xfeff;&#xfeff; 高斯平滑 Common Names: Gaussian smoothing 简述&#xff1a; 高斯平滑操作是一种2-D的卷积操作&#xff0c;应用于模糊图像中&#xff0c;去除细节和噪声。从这个意思上说&#xff0c;它类似于均值滤波器&#xff0c;但是使用的是不同的内核&#…

高斯平滑 高斯模糊 高斯滤波器 ( Gaussian Smoothing, Gaussian Blur, Gaussian Filter ) C++ 实现

发展到现在这个平滑算法的时候, 我已经完全不知道如何去命名这篇文章了, 只好罗列出一些关键字来方便搜索了. 在之前我们提到过了均值滤波器, 就是说某像素的颜色, 由以其为中心的九宫格的像素平均值来决定. 在这个基础上又发展成了带权的平均滤波器, 这里的高斯平滑或者说滤波…

Gaussian Smoothing(高斯平滑)

高斯平滑操作是一个二维卷积操作&#xff0c;用于**“模糊”**图像&#xff0c;去除细节和噪音。它类似于均值滤波器(假如3X3&#xff0c;则全部相加取均值&#xff0c;即成为中间点的像素值)&#xff0c;但它使用不同的核表示高斯驼峰的形状。 二维高斯公式 平均值(0&#xf…

高斯-赛戴尔(Gauss-Seidel)迭代法及算法实现

1、高斯-赛戴尔迭代法的定义以及表达形式 以下列方程组为例&#xff1a; 在雅克比迭代法中&#xff0c;并没有对新算出的分量进行充分利用&#xff0c;一般来说&#xff0c;这些新算出计算的结果要比上一步计算的结果精确。 对上式第二个方程组&#xff0c;第一行式子算出的x值…

常用技术指标之一文读懂RSI指标

什么是RSI指标&#xff1f; RSI (Relative Strength Index) 中文名又叫相对强弱指标&#xff0c;由韦尔斯.怀尔德(Welles Wilder)首创&#xff0c;发表在他的《技术交易系统新思路》一书中&#xff08;1978年版&#xff09; RSI指标基本原理&#xff1a; 通过测量一段时间间内…

量化投资常用技能——指标篇3:详解RSI指标,及其代码实现和绘图

量化投资常用技能 系列文章目录 我们已经介绍了三篇关于量化投资方面绘图的文章和两篇指标类的推导和介绍的文章&#xff0c;大家有兴趣可以了解一下 绘图篇 量化投资常用技能——绘图篇 1&#xff1a;绘制股票收盘价格曲线和ochl烛状图量化投资常用技能——绘图篇 2&#xf…