- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我们想从 MFC dll (Visual Studio 2015) 中显示一些浏览器窗口。不幸的是,一旦我们卸载 CEF,它就会崩溃。我们发现了非常相似的问题,但从未找到答案。
为了更好地了解问题,我们将所有 CEF 内容移动到另一个 dll (cefwrapper) 中。这些是我们基本上执行的主要步骤:
1. LoadLibrary(cefwrapper.dll)
2. Inside cefwrapper.dll
a. CefString(&settings.browser_subprocess_path) = "cefsimple.exe"
b. CefInitialize(args, settings, this, NULL)
c. window_info.SetAsChild(hwnd, rect);
d. browser_ = CefBrowserHost::CreateBrowserSync(window_info, browser_client_.get(), url, browser_settings, request_context);
e. ::SetParent(browser_->GetHost()->GetWindowHandle(), NULL); // Prevent getting a CLOSE Message
f. CloseBrowser();
g. Waiting until OnBeforeClose was called for all browsers.
h. CefShutdown();
i. (all sub-processes (cefsimple.exe) are gone by now)
3. FreeLibrary --> Crash
调用堆栈
libcef.dll!sandbox::BrokerServicesBase::~BrokerServicesBase() Line 135 C++
libcef.dll!sandbox::SingletonBase<sandbox::BrokerServicesBase>::OnExit() Line 63 C++
libcef.dll!_execute_onexit_table::__l2::<lambda>() Line 206 C++
libcef.dll!__crt_seh_guarded_call<int>::operator()<<lambda_7777bce6b2f8c936911f934f8298dc43>,int <lambda>(void) & __ptr64,<lambda_3883c3dff614d5e0c5f61bb1ac94921c> >(__acrt_lock_and_call::__l2::<lambda_7777bce6b2f8c936911f934f8298dc43> && setup, _execute_onexit_table::__l2::int <lambda>(void) & action, __acrt_lock_and_call::__l2::<lambda_3883c3dff614d5e0c5f61bb1ac94921c> && cleanup) Line 204 C++
libcef.dll!_execute_onexit_table(_onexit_table_t * table) Line 231 C++
libcef.dll!common_exit::__l2::<lambda>() Line 230 C++
libcef.dll!__crt_seh_guarded_call<void>::operator()<<lambda_d80eeec6fff315bfe5c115232f3240e3>,void <lambda>(void) & __ptr64,<lambda_2358e3775559c9db80273638284d5e45> >(__acrt_lock_and_call::__l2::<lambda_d80eeec6fff315bfe5c115232f3240e3> && setup, common_exit::__l2::void <lambda>(void) & action, __acrt_lock_and_call::__l2::<lambda_2358e3775559c9db80273638284d5e45> && cleanup) Line 224 C++
libcef.dll!common_exit(const int return_code, const _crt_exit_cleanup_mode cleanup_mode, const _crt_exit_return_mode return_mode) Line 278 C++
不调用 FreeLibrary 会将问题推迟到应用程序退出的时候。
我们正在使用 cef_binary_73.1.12+gee4b49f+chromium-73.0.3683.75_windows64
作为替代方案,我们通过 CreateProcess 启动 cefsimple.exe 并将 hwnd 传递给该进程。不幸的是,一段时间后,浏览器窗口卡住。
最佳答案
切勿为 CEF DLL 调用 FreeLibrary
。
Chromium 有许多全局对象(单例、实用程序线程),它们应该在应用程序结束之前一直存在。这样做是为了更快地终止应用程序:不会删除全局对象和单例,不会终止线程,在进程终止时没有人担心它。
当您调用 FreeLibrary
时,您破坏了这个架构。从 CEF 启动的线程保持事件状态,但释放 DLL 内存。因此你会崩溃。
要修复它,请不要执行第 3 步。
关于c++ - 卸载 CEF 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55648885/
我在 Delphi 10.1 的项目中使用 CEF 3.2623.1401.gb90a3be (Chromium 49.0.2623.110)。 (我必须使用相当旧版本的 CEF/Chromium 才
我想使用CEF来控制Flash应用程序,所以我需要在没有JavaScript的情况下模拟MouseDown和KeySend。我正在使用离屏渲染。这是我尝试过的: managedCefBrowserAd
我有一个 Chromium 嵌入式框架 (CEF) 应用程序,我们希望在客户端 JavaScript 端与浏览器端之间进行通信。到目前为止,我们有可能使用通用消息路由器 GenericMessageR
我的应用程序无法构建甚至运行。它给我一个创建 CEF 浏览器失败的错误。 直到今天,一切都运行良好。我按照此链接中的说明再次卸载并安装了 CEF:Big Changes and CEF但它仍然给了我错
首先,我在gitter和github讨论板以及wiki页面中进行了搜索,但仍然没有任何进展.. 所以我第一次在这里问这个问题......: 最后也是最好的事情是我尝试将对象暴露给 javascript
我想要使用 CEF 渲染网页的应用程序的 html 部分(例如:类 Chrome_RenderWidgetHostHWND)的屏幕截图。 尝试使用 BitBlt和 PrintWindow但只能捕获黑屏
有什么方法可以检测我的 JS 代码是在真正的浏览器中运行,还是在 CEF 或 Electron 等工具包中运行? 最佳答案 如果您可以控制托管 CEF 控件的应用程序,您可以注册一个要绑定(bind)
我正在使用原始 WinAPI 在 C++ 上开发一个应用程序,它使用 CEF 3 来显示 UI。问题在于此 UI 嵌套在弹出窗口中(没有标题栏和关闭/最小化按钮)。所以我想让一些客户区像标题一样,用户
您能帮我确定 chromium 嵌入式框架(cef)中支持的 ECMAScript 版本吗? 我想使用 ECMAScript 6。 最佳答案 这取决于相应的 Chromium 版本:https://c
我是 CEF 的新手,我正在尝试在 ubuntu 12.04 x64 上创建新的无边界浏览器(仅用于网页查看)。目前我已经尝试过这种方式(gtk 顶级窗口 -> 禁用装饰 -> 将父级设置为以前创建的
我想从我的 exe 文件中嵌入的资源加载 HTML。我在 Windows 8.1 上使用 C++ 和 CEF3。 我看过 this article它似乎正是我要找的东西,但它与 CefSharp 有关
今天我正在尝试使用 cefpython 开发一个 UI,它允许我嵌入一个 web 浏览器并通过 javascript 绑定(bind)与其交互。 我正在使用它在 Windows 平台上进行开发。为此,
我创建一个浏览器: browser = cef.CreateBrowserSync(url=os.path.dirname(os.path.abspath(__file__))+'\\gui.html
有没有办法在 CEF Python 中添加代理身份验证? 我能找到的最佳答案是 here 。问题是代码是用 C# 编写的,我无法将其转换为 Python。 最佳答案 CEF Python 目前不支持引
我们想从 MFC dll (Visual Studio 2015) 中显示一些浏览器窗口。不幸的是,一旦我们卸载 CEF,它就会崩溃。我们发现了非常相似的问题,但从未找到答案。 为了更好地了解问题,我
今天我正在使用 Chromium Embedded Framework 3。 我已设置、编译和执行所有内容。一切正常。 现在我想在呈现所有内容并执行 JavaScript 后读取页面源代码。我还想从离
在 Windows 上,我尝试使用 CEF(Chromium 嵌入式框架)创建一个窗口应用程序,其父窗口是透明的,其子窗口是不透明的(我想要一个圆角和一个指向子窗口中的状态栏)。类似于: 我尝试使用
我有一个包含 2 个标签页的应用程序。应用程序的容器是用 native 代码开发的,CEF 已用于在其中一个选项卡中打开 html 页面。当我从选项卡 1( native )切换到选项卡 2(CEF)
我在虚幻引擎中使用 cefclient。当您在普通的 chrome 浏览器中拖动任何图像时,它会提供图像预览。 但是,当我尝试在 cefclient 中做同样的事情时,它没有工作。所以我尝试下载 ce
我目前有这个正则表达式: ?P\w+)=(?P[a-zA-Z0-9-_:/@. ]+ 输入第 1 行:event=1921;json={"source":"A","location":B":"fold
我是一名优秀的程序员,十分优秀!