CefInitialize不能用于mfc dll

时间:2014-08-20 12:36:47

标签: mfc chromium-embedded

我想在mfc dll中使用Chromium Embeded Framework。因此,我创建了一个mfc测试exe并测试了cef的简约实现(有效)。我的下一步是使用测试mfc dll做同样的事情。代码几乎相同,但cef浏览器窗口不会出现。

应用程序在CefInitialize()中挂起,不会返回。调试后,我发现它卡在WaitForSingleObject / WaitForMultipleObject windows api中。

BOOL CMyBrowserDllApp::InitInstance()
{
    HINSTANCE hInstance = GetModuleHandle(NULL);

    CefMainArgs main_args(hInstance);

    CefSettings settings;
    settings.no_sandbox = true;
    settings.multi_threaded_message_loop = true;

    // Execute the secondary process, if any.
    int exit_code = CefExecuteProcess(main_args, cefApplication.get(), NULL);
    if (exit_code >= 0)
        return exit_code;

    if(!CefInitialize(main_args, settings, cefApplication.get(), NULL))
    {
        OutputDebugStringA("Error: CefInitialize failed");
    }else
        OutputDebugStringA("Info: CefInitialize succeeded");

    CWinApp::InitInstance();

    return TRUE;
}

如果直接在mfc exe中使用,则相同的实现方式。

1 个答案:

答案 0 :(得分:-1)

GetModuleHandle返回exe的基数而不是dll。您可能希望隐藏dll基础:

BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, void *reserved)