Разгрузка сбоев CEF - PullRequest
       11

Разгрузка сбоев CEF

1 голос
/ 12 апреля 2019

Мы хотим показать некоторые окна браузера из библиотеки MFC (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

CallStack

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

В качестве альтернативы мы запустили cefsimple.exe через CreateProcess и передали hwnd этому процессу.К сожалению, через некоторое время окно браузера зависает.

...