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

时间:2016-09-12 11:58:13

标签: chromium-embedded

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

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

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

1 个答案:

答案 0 :(得分:0)

您尝试完成的应用程序模型目前不受cef3支持。即使你以某种方式得到一个64位的cef帮助程序可执行文件链接到64位libcef.dll,你仍然需要在你的主要可执行文件上有相当多的cef应用程序代码。

原则上你的32位主代码仍然需要一个32位的libcef.dll,我怀疑他们无法与cef的帮助程序交谈,因为他们的内部IPC可能不是平台无关,换句话说,它可能使用具有本机整数等的共享内存,并且它们将是不兼容的,并且AFAIK没有用于利用它的全功能IPC代码。

根据你的意见,问题是内存消耗,如果我是你,我会采取以下路径:

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

b)如果还不够,最好的办法是将浏览器应用程序逻辑移到一个单独的64位可执行文件中,并在它和你的应用程序之间自己制作IPC。根据您的应用程序的要求,它可以像将cef主窗口附加到应用程序上的小部件并执行https://bitbucket.org/chromiumembedded/cef/wiki/JavaScriptIntegration.md中所述的操作一样简单,但我怀疑它可能比这更复杂。

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

如果您决定在32位方案中使用帮助程序,请不要忘记将其与/ LARGEADDRESSAWARE链接。