CEF,Chromium Embedded Framework的縮寫。CEF 的官網介紹的很簡潔:A simple framework for embedding chromium browser windows in other applications。具體地說就是一個可以將瀏覽器功能(頁面渲染,JS 執行)嵌入到其他應用程序的框架。感興趣的看這里:[https://bitbucket.org/chromiumembedded/cef](https://bitbucket.org/chromiumembedded/cef)。
用CEF的好處是開發Web和Native混合的應用非常方便,比調用Windows的ie組件要好得多,最起碼可以隨應用攜帶一個穩定版本的Chrominum,而ie版本太多,你的應用很依賴用戶的操作系統,各種兼容性的坑……
花了大半天時間,終于跑通了cefsimple這個小示例。記錄下過程。
# 工具
我的搭配:
- VS 2013
- [CMake 3.4.1](https://cmake.org/download/)
- CEF 3.2357.1271([CSDN下載頻道的binary包](http://download.csdn.net/detail/zhang116868/8750429))
我把CEF Binary for windows解壓到了這個目錄:D:\projects\cef_binary_3.2357.1271.g8e0674e_windows32,下文我們用CEFDIR來代替它。
現在的CEF Binary里沒有VS項目和解決方案了,得自己生成。
# 環境配置與編譯過程
cefsimple示例依賴libcef_dll_wrapper,需要先編譯libcef_dll這個項目。
### 編譯libcef_dll
1. 到[https://cmake.org/download/](https://cmake.org/download/)下載CMake 3.4.1(cmake-3.4.1-win32-x86.zip)
1. 解壓到某個目錄,我這里是E:\software\cmake-3.4.1-win32-x86,后面有用 your-cmake-dir指代。打開命令行(cmd.exe),執行“set path=your-cmake-dir/bin;%path%”命令。
1. 切換到CEFDIR/libcef_dll目錄,執行“CMake .”命令,生成VS 2013的項目文件和solution文件
1. 使用VS 2013打開CEFDIR/libcef_dll目錄下的Project.sln,選中libcef_dll_wrapper這個項目,打開項目屬性,設置C++附加包含目錄,把CEFDIR目錄添進去
1. 選中libcef_dll_wrapper,鼠標右鍵,屬性–>配置屬性–>C/C++–>預處理器定義,編輯,新增一個NOMINMAX宏。這是為了解決std::min/std::max和VC全局定義的min/max宏沖突。libcef_dll里有些cc文件內用了std::min/max模板函數,不添加NOMINMAX,可能出現C2589和C2059錯誤
1. Debug版本,運行庫選擇“多線程調試(MTd)”;Release版本選擇MT。
1. 編譯,生成libcef_dll_wrapper.lib文件
1. 把libcef_dll_wrapper.lib放到CEFDIR/Release(或Debug)目錄下
我編譯中遇到了一些錯誤,找到了解決辦法,已經包含在上面的步驟里了。
### 編譯cefsimple示例
有了libcef_dll_wrapper,就可以編譯cefsimple了。
我本來想用CMake生成,結果折騰半天,CMake執行過了,卻沒生成對應的cefsimple.vcxproj……只好手動創建了一個VS項目。
過程如下:
1. 自己創建一個cefsimple項目,Win32類型,空項目
1. 將cefsimple_win.cc,simple_app.cc,simple_handler.cc,simple_handler_win.cc作為源文件添加到項目里
1. 將resource.h,simple_app.h,simple_handler.h作為頭文件添加到項目里
1. 設置附加包含目錄,把CEFDIR目錄加進去
1. 設置附加庫目錄,CEFDIR/Release(或Debug)
1. 添加附加依賴項,把libcef_dll_wrapper.lib、libcef.lib、DbgHelp.lib加進去
1. simple_app.cc中的www.google.com替換為www.baidu.com(Google打不開啊……)
1. Debug版本,運行庫選擇“多線程調試(MTd)”;Release版本選擇MT。注意這里的選擇,和libcef_dll要一致,不然會出鏈接錯誤
1. 把工作目錄設置為CEFDIR/Release(或Debug)
1. 編譯運行
運行時可能會Crash,把CEFDIR/Resources目錄下的內容拷貝到CEF/Release(或Debug)下即可。CEF需要里面的icudtl.dat、語言文件等。
運行效果如下圖:

CEFDIR目錄下有個README.txt文件,一定要看,我編譯通過后運行總crash,在VS一點一點Debug、看程序輸出,花了老長時間才發現時Resources的問題!
Ok,環境就這樣好了,接下來可以研究CEF的SDK了。
- 前言
- CEF Windows開發環境搭建
- CEF加載PPAPI插件
- VS2013編譯最簡單的PPAPI插件
- 理解PPAPI的設計
- PPAPI插件與瀏覽器的交互過程
- Windows下從源碼編譯CEF
- 編譯PPAPI的media_stream_video示例
- PPAPI插件的繪圖與輸入事件處理
- 在PPAPI插件中創建本地窗口
- PPAPI插件與瀏覽器的通信
- Windows下從源碼編譯Skia
- 在PPAPI插件中使用Skia繪圖
- 加載DLL中的圖片資源生成Skia中的SkBitmap對象
- PPAPI+Skia實現的涂鴉板
- PPAPI中使用Chromium的3D圖形接口
- PPAPI中使用OpenGL ES繪圖