首页 > 解决方案 > 如何使用 WebView2 运行时的替代版本?

问题描述

这似乎是一个非常愚蠢(基本)的问题。

我正在编写一个使用新 WebView2 控件的 C++ 图形 (Windows) 应用程序。微软提供的样本非常好。但是我遇到了样本中未显示的问题。但是经过两天的谷歌搜索和其他方式的搜索,我找不到答案。我希望这个社区可以提供帮助。

我正在尝试调用 WebView2_4 方法 add_DownloadStarting(),但尝试从 WebView2 窗口获取 WebView2_4 指针不断给我一个 E_NOINTERFACE。

特别是,我有以下代码:

    wil::com_ptr<ICoreWebView2> wvWnd = nullptr;
    if (controller != nullptr) {
        pWebView2->m_webviewController = controller;
        pWebView2->m_webviewController->get_CoreWebView2(&wvWnd);
    }
    wil::com_ptr<ICoreWebView2_4> wvWnd4 = wvWnd.try_query<ICoreWebView2_4>();

最后一行导致 wvWnd4 的 m_ptr 为 NULL。进入最后一行会调用 QueryInterface(),它返回 hr 值 E_NOINTERFACE。

请注意,像

    wil::com_ptr<ICoreWebView2_3> wvWnd3 = wvWnd.try_query<ICoreWebView2_3>();

wvWnd3 的结果具有有效的 m_ptr(非 NULL)。

我怀疑这是因为我使用的是当前的 WebView2 运行时(版本 1.0.864.35),而我需要使用更高版本(1.0.902-prerelease)。我已经下载并安装(使用 nuget)预发布版本,但我不知道如何实际加载它。在 Visual Studio 2017 调试器中运行我的应用程序时的输出窗口显示:

'myapp.exe' (Win32): Loaded 'D:\src\c\myapp\Debug\Win32\bin\WebView2Loader.dll'.
'myapp.exe' (Win32): Loaded 'C:\Program Files (x86)\Microsoft\EdgeWebView\Application\91.0.864.59\EBWebView\x86\EmbeddedBrowserWebView.dll'.

这是旧版本。

或者也许还有其他问题?我开始感到沮丧,任何帮助将不胜感激。

标签: c++win32guiwebview2

解决方案


推荐阅读