从 32 位应用程序调用 CEF3 64 位

Calling CEF3 64 bit from 32 bit application

我们有一个 32 位应用程序,我们已经从它调用了一个 32 位 chromium 嵌入式框架。

我们现在想调用 CEF3 64 位进程,因为我们无法将应用程序升级到 64 位。

是否有任何示例如何实现它(我读到有一个 IPC 架构),我必须说我能够创建子进程但是,我没有看到任何渲染(我猜主要UI 线程没有响应)。

cef3 当前不支持您尝试完成的应用程序模型。即使您以某种方式将 64 位 cef 辅助可执行文件 link 编辑为 64 位 libcef.dll,您仍然需要在主可执行文件上使用大量的 cef 应用程序代码。

所以原则上你的 32 位主代码仍然需要 32 位 libcef.dll 我怀疑他们不能与 cef 的辅助进程对话,因为他们的内部 IPC 可能不是平台不可知的,换句话说,它可能使用带有本机整数等的共享内存,它们将不兼容,而且 AFAIK 没有用于利用它的全功能 IPC 代码。

根据你的跟进,问题是内存消耗,如果我是你,我会选择以下路径:

a) 通过将 /LARGEADDRESSAWARE 传递给 linker 尝试 link 32 位可执行文件(假设您使用的是 msvc)。这允许 32 位进程映射高达 3GB 的 RAM,如果您在 cef 论坛中搜索,您会发现很多用户在使用 32 位和 linking 时遇到问题,例如http://magpcss.org/ceforum/search.php?keywords=large+address)。我自己有一个带有 32 位可执行文件的部署产品,到目前为止还没有遇到内存问题,我正在使用这个选项。

b) 如果这还不够,最好的办法是将浏览器应用程序逻辑移动到一个单独的 64 位可执行文件,并在它和您的应用程序之间制作您自己的 IPC 形式。根据您的应用程序的需要,它可能就像将 cef main window 附加到您应用程序上的一个小部件并按照 https://bitbucket.org/chromiumembedded/cef/wiki/JavaScriptIntegration.md 中描述的那样简单,但我怀疑它可能比那。

只有在具有上述任一解决方案的工作场景后,我才会考虑使用单独的 cef 帮助程序可执行文件(因为让它工作可能会妨碍您)。它的主要用途是提供更快的加载,因为您的应用程序通常 link 到几个(有时是巨大的)DLL,而助手可以减少到 link 到 libcef.dll (和 c/c++ 运行时间)。

如果您决定在 32 位场景中使用帮助程序,请不要忘记 link 也使用 /LARGEADDRESSAWARE。