Libcef 的完整发行包中自带示例代码,可以用cmake生成工程后编译运行。我的目的将cefclient编译为DLL,由它与libcef打交道,最终的exe与所有dll互无编译依赖,通过 GetProcAddress 动态对接。
参考:notepad++插件、miniblink-wke控件的实现。
首先,编译 cefclient.exe,记得关闭“treat warning as error”。关闭这种选项在项目设置里的"all options"中搜索即可。
编译成功后,显示出有几个按钮、一些菜单的简单浏览器界面。
2020年了,LIBCEF的演示项目一上来就三个问题:
-
默认会搜索代理服务器,当打开 ie设置->互联网->链接->局域网设置->自动检测设置时,启动相当慢,需要6秒左右。
-
默认是"多进程模式",对于一个控件来说,未免太过怪异与奢侈了点。
-
会记录log文件,而且启动有弹窗提示。
自动检测设置
解决前两个问题,需要在程序启动参数中追加参数开关--no-proxy-server --single-process
。多进程模式下,新启动的进程会重复几次进入wWinMain入口,而且自带参数,可以打印查看:
若想要直接在程序中嵌入参数,也不是没有办法。因为GetCommandLine
返回的字符串是可以修改的:
auto cmd = GetCommandLine();
auto idx=wcsstr(cmd, L"\" --");
if(idx)
{
idx=idx+1;
}
else
{
// todo boundary check
idx = cmd+lstrlen(cmd);
}
if(idx)
{
lstrcpy(idx, TEXT(" -no-proxy-server -single-process -disable-logging"));
}
// 在 CefExecuteProcess 之前调用
这一点恐怕没人想得到吧,不过可能有潜在的数组越界问题。
解决问题三就简单的多了,直接修改cefsetting结构,关闭log即可。
CefSettings settings;
// context->PopulateSettings(&settings); // 不要用这句,骗小孩子的玩意。
settings.log_severity=LOGSEVERITY_DISABLE;
吐槽一下CMAKE,生成的项目真是一团糟,一模一样的运行库复制了好几遍,一下子就浪费近一个G。CMAKE不是生成了就拍一拍衣袖深藏功与名的那种,而是存留了很多莫名其妙的CustomBuild与安装指令,事实上把这些CMAKE余孽全部删掉都没有问题。
CMAKE最大的问题:生成的vs项目里全部都是绝对路径,目录一搬就出错。如果是相对路径,直接把解决方案上传github都没有问题,别人打开就可以编译,哪里用得着CMAKE?
未完待续……
下一篇:初次封装,拿到浏览器HWND
网友评论