最新CEF3無法正確加載URL問題

問題描述:
之前使用CEF3加載網頁,按照正常流程,可以直接加載出網頁(具體可以參考我的其他關於CEF的文檔),現在把原來的代碼拿出來編譯運行也可以正確加載網頁,但是原來的程序庫是32位的,現在想編譯一個64位版本的,重新下載了CEF3的代碼編譯,將lib添加到原來的程序代碼中,無法正確加載出網頁(界面一片空白),我一直以爲是CEF3的問題,但是編譯CEF3自帶的demo後,運行發現可以正常加載出網頁,這就很蛋疼了。

問題查找過程
①最開始下載的最新的CEF3代碼,以爲是最新代碼有問題,於是下載和之前32位版本一樣的代碼編譯,同樣不能加載網頁。
②編譯原來32位版本的CEF3代碼,按照之前文檔上寫的流程,發現可以正確加載網頁,於是按照同樣的方法編譯64位版本的CEF3代碼,發現不能加載網頁。
③以爲是MFC框架的問題,開始的代碼我是基於MFC對話框寫的,發現對話框不能加載網頁,而CEF3的WIN32窗口可以加載出網頁,於是採用WIN32框架編寫,發現32位的沒有問題,64位還是無法加載出網頁。
④編譯運行64位位版本的CEF3的demo代碼,把網址替換掉,發現能正確打開對應的網頁,這就不得不研究下自己寫的demo和CEF3自帶的demo有啥區別了。於是打開屬性頁面,一個一個的對比,修改替換,最後定位到“生成事件”→“生成後事件”,如下所示:
在這裏插入圖片描述
發現命令行中有東西,開始我只曉得程序需要自動將需要的dll和對應的資源文件複製到運行文件同級目錄中(因爲之前的代碼我是手動複製過來的,所以這個地方我就沒有寫),但是全部刪除後,編譯運行發現網頁奇蹟的加載不出來了,然後將這個命令行全部複製出來分析,最後發現,除了開始的一截代碼有點意思外,其他代碼就是複製文件,於是將複製文件的代碼刪除掉,只保留開始的一個setlocal代碼,編譯運行發現,網頁能正常顯示。

問題解決
項目屬性→生成事件→生成後事件→命令行,裏面添加如下代碼:

setlocal
mt.exe -nologo -manifest "xx.exe.manifest" "compatibility.manifest" -outputresource:"../x64/Debug/xx.exe";#1
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd

其中“xx.exe.manifest”是從CEF3的demo代碼中複製過來的,我把名字改了,“xx.exe”是你的工程生成的exe的名字,具體爲啥要這樣做,據說是系統兼容性問題(這也難怪,32位程序不需要設置這個,64位系統就需要設置這個)。具體原因可以參考:https://docs.microsoft.com/zh-cn/windows/win32/sysinfo/targeting-your-application-at-windows-8-1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章