纯 c 的 cef 示例
https://github.com/cztomczak/cefcapi/blob/master/examples/main_win.c
https://bitbucket.org/chromiumembedded/cef/wiki/UsingTheCAPI.md
https://github.com/cztomczak/cefcapi
搜索 bing 国际版本时找到的,baidu 是不行的,拆分得太散了
https://cn.bing.com/search?q=cef_context_menu_handler_on_before_context_menu&qs=n&form=QBLHCN&sp=-1&pq=cef_context_menu_handler_on_before_context_menu&sc=0-47&sk=&cvid=C229537ECA28473A8518AC222ED351B3
cef_context_menu_handler_on_before_context_menu 会被 baidu 拆分所以是找不到的,而这个是在 dcef3 调试时意外发现是 stdcall 的,明显是一个 dll 标准的相关函数,
所以一搜索就找到了相关的内容.这样就可以用于纯 C 环境了.
>起因其实是查找 decf3 中的右键菜单 'Inspect Element' 是哪里来的,搜索源码后发现是在
procedure TMainForm.crmBeforeContextMenu(Sender: TObject;
const browser: ICefBrowser; const frame: ICefFrame;
const params: ICefContextMenuParams; const model: ICefMenuModel);
begin
model.AddItem(CUSTOMMENUCOMMAND_INSPECTELEMENT, 'Inspect Element');
end;
加入的,断点这个位置就可以了.
cef wke miniblink
miniblink 使用了 wke 接口,去掉了音频视频
https://weolar.github.io/miniblink/doc-main.html
wke 也是国人开发的,使用的纯 C 接口,不过比较老,后来又有人维护,不过现在是停留在 cef 2011 年左右的水平.具体其 github 上有说明.
目前是在 https://github.com/cexer/wke
--------------------------------------------------
miniblink使用了wke的接口。wke的相关介绍可以google一下。
总的来说,miniblink的接口是纯C导出,只要使用wke.h即可加载。无需.lib。
机器翻译
此wiki页面提供有关如何在客户端应用程序中使用CEF C API的信息。
编者须知:未经CEF论坛或问题跟踪程序事先批准,对此wiki页面所做的更改可能会丢失或恢复。
介绍
CEF C API是libcef dll导出的基于C的接口。定义接口的CEFJCAPI.H头文件由CEF翻译器工具自动生成,并镜像CEF C++API结构。
使用C API的客户机应用程序示例可从以下网址获得:https://github.com/czarektomczak/cefcapi
参考计数
理解参考计数可能是使用CEF C API最困难的部分。CEF使用的参考计数概念与COM使用的概念非常相似。下面是一些要遵循的一般规则,以使您的引用计数尽可能无痛。
1。在将结构传递给它自己的成员函数时,不要增加/减少引用计数:
struct->call_func(struct,…);//没有对“struct”进行引用计数更改
2。在将一个结构作为参数传递给另一个结构之前,请增加该结构的引用计数:
//应该已经添加了对“some-other-struct”的引用
struct->call_func(…,some_other_struct,…);
三。在使用完结构后,当从其他地方接收它作为参数时,减少它的引用计数:
无效我的功能(…,一些其他结构,…)
{
//使用完“some-other-struct”后,将其移除
}
4。例如,在将处理程序传递到cef_create_browser()之前,添加对该处理程序的引用。当不再需要处理程序时,API将从处理程序中删除引用。
5。使用原子引用计数实现,因为可以从多个线程调用add-ref和release。WinAPI InterlockedCrement()和InterlockedDecrement()函数可用于此目的。
6。在为结构分配的release()回调函数中,当引用计数达到零时,处理程序应该删除自己。
//扩展CEF处理程序的自定义数据结构
typedef结构\u我的处理程序\u t{
cef_handler_t handler;//cef_handler_t成员在前面
//此处的自定义成员,包括引用计数变量
Myo-Hall;
//分配自定义数据结构(已初始化为零)
我的处理器(我的处理器)calloc(1,sizeof(我的处理器));
//适当设置cef_base_t的大小成员
my_handler->handler.base.size=sizeof(cef_handler_t);
//分配释放回调函数(以及其他回调函数)
my_handler->handler.base=my_版本;
…
//为我的处理程序释放回调函数实现
int cef_回调my_release(struct-cef_base_t*base){
//此强制转换有效,因为Cef_Base_t是
//CEF处理程序t和CEF处理程序t是我的处理程序t的第一个成员
我的处理器(我的处理器)基础;
//减少引用计数(存储为my_handler_t的自定义成员)
//当引用计数为零时释放my_handler_t结构
如果(参考计数为零)
免费(我的处理程序);
}
7。反转代码添加到结构的任何其他引用(例如,如果在处理程序实现中保留对CEF浏览器指针的引用)。释放引用的最后一个机会是在cef_handler_t::handle_before_window_closed()中。
8。当没有任何东西崩溃,并且在关闭时不再命中debugobjct断言时,您将知道您正确地处理了引用计数。
原始的 cef 下载处:
http://opensource.spotify.com/cefbuilds/index.html
https://blog.csdn.net/ftpleopard/article/details/84870054
"一步步CEF(1)之编译libcef_dll_wrapper.lib
如果要从源码编译的话,估计硬盘和内存都有要求,这个我不想尝试,可以只能下载一份做c++的。(有空可以考虑源码编译的,不过目前这个必要)注意:下面工程为了简单,没有将lib的名字设置为libcef_dll_wrapper!"