Не могу скомпилировать проект WebView2

Я использую Visual Studio 2015, версия 14.0.23107.0. Версия целевой платформы проекта 10.0.17763.0.

Я прочитал эту статью, и выполнил первые шаги. Я скачал решение webview2 с GitHub‘а и открыл его в Visual Studio. Затем, через NuGet я успешно добавил Windows Implementation Library package (версия 1.0.200902.2), и WebView2 package (версия 0.9.579).

Затем, в HelloWebView.cpp я добавил

#include "WebView2.h"

Не могу скомпилировать. Ошибок в HelloWebView.cpp и в WebView2.h нет. Похоже, проблема в Windows Implementation Library.

Вот список ошибок компилятора:

1>C:\Program Files\Windows Kits\10\Include\10.0.17763.0\shared\strsafe.h(972): error C2146: синтаксическая ошибка: отсутствие ")" перед идентификатором "pszDest"
1>C:\Program Files\Windows Kits\10\Include\10.0.17763.0\shared\strsafe.h(978): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>C:\Program Files\Windows Kits\10\Include\10.0.17763.0\shared\strsafe.h(978): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>C:\Program Files\Windows Kits\10\Include\10.0.17763.0\shared\strsafe.h(1098): error C2065: STRSAFE_LPWSTR: необъявленный идентификатор
1>C:\Program Files\Windows Kits\10\Include\10.0.17763.0\shared\strsafe.h(1098): error C2146: синтаксическая ошибка: отсутствие ")" перед идентификатором "pszDest"
1>C:\Program Files\Windows Kits\10\Include\10.0.17763.0\shared\strsafe.h(1104): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>C:\Program Files\Windows Kits\10\Include\10.0.17763.0\shared\strsafe.h(1104): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>C:\Program Files\Windows Kits\10\Include\10.0.17763.0\shared\strsafe.h(1342): error C2065: STRSAFE_LPSTR: необъявленный идентификатор
1>C:\Program Files\Windows Kits\10\Include\10.0.17763.0\shared\strsafe.h(1342): error C2146: синтаксическая ошибка: отсутствие ")" перед идентификатором "pszDest"
1>C:\Program Files\Windows Kits\10\Include\10.0.17763.0\shared\strsafe.h(1348): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>C:\Program Files\Windows Kits\10\Include\10.0.17763.0\shared\strsafe.h(1348): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>C:\Program Files\Windows Kits\10\Include\10.0.17763.0\shared\strsafe.h(1473): error C2065: STRSAFE_LPWSTR: необъявленный идентификатор
1>C:\Program Files\Windows Kits\10\Include\10.0.17763.0\shared\strsafe.h(1473): error C2146: синтаксическая ошибка: отсутствие ")" перед идентификатором "pszDest"
1>C:\Program Files\Windows Kits\10\Include\10.0.17763.0\shared\strsafe.h(1479): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>C:\Program Files\Windows Kits\10\Include\10.0.17763.0\shared\strsafe.h(1479): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>C:\Program Files\Windows Kits\10\Include\10.0.17763.0\shared\strsafe.h(1695): error C2065: STRSAFE_LPSTR: необъявленный идентификатор
1>C:\Program Files\Windows Kits\10\Include\10.0.17763.0\shared\strsafe.h(1695): error C2146: синтаксическая ошибка: отсутствие ")" перед идентификатором "pszDest"
1>C:\Program Files\Windows Kits\10\Include\10.0.17763.0\shared\strsafe.h(1699): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>C:\Program Files\Windows Kits\10\Include\10.0.17763.0\shared\strsafe.h(1699): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>C:\Program Files\Windows Kits\10\Include\10.0.17763.0\shared\strsafe.h(1737): error C2065: STRSAFE_LPWSTR: необъявленный идентификатор
 1>C:\Program Files\Windows Kits\10\Include\10.0.17763.0\shared\strsafe.h(1737): error C2146: синтаксическая ошибка: отсутствие ")" перед идентификатором "pszDest"
 1>C:\Program Files\Windows Kits\10\Include\10.0.17763.0\shared\strsafe.h(1741): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>C:\Program Files\Windows Kits\10\Include\10.0.17763.0\shared\strsafe.h(1741): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>C:\Program Files\Windows Kits\10\Include\10.0.17763.0\shared\strsafe.h(1873): error C2065: STRSAFE_LPSTR: необъявленный идентификатор
1>C:\Program Files\Windows Kits\10\Include\10.0.17763.0\shared\strsafe.h(1873): error C2146: синтаксическая ошибка: отсутствие ")" перед идентификатором "pszDest"
1>C:\Program Files\Windows Kits\10\Include\10.0.17763.0\shared\strsafe.h(1877): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
    1>c:\users\okuma\desktop\win32_gettingstarted\packages\microsoft.windows.implementationlibrary.1.0.200902.2\include\wil\wistd_type_traits.h(3693): error C2325: _Tp: непредвиденный тип справа от ".~": требуется "add_lvalue_reference<_Tp>::type"
1>  c:\users\okuma\desktop\win32_gettingstarted\packages\microsoft.windows.implementationlibrary.1.0.200902.2\include\wil\wistd_type_traits.h(3695): note: см. ссылку на создание экземпляров класса шаблон при компиляции "wistd::__libcpp_is_nothrow_destructible<true,_Tp>"
1>c:\users\okuma\desktop\win32_gettingstarted\packages\microsoft.windows.implementationlibrary.1.0.200902.2\include\wil\common.h(587): error C2039: enable_if_t: не является членом "wistd"
1>  c:\users\okuma\desktop\win32_gettingstarted\packages\microsoft.windows.implementationlibrary.1.0.200902.2\include\wil\wistd_type_traits.h(46): note:  см. объявление "wistd"
1>c:\users\okuma\desktop\win32_gettingstarted\packages\microsoft.windows.implementationlibrary.1.0.200902.2\include\wil\common.h(587): error C2061: синтаксическая ошибка: идентификатор "enable_if_t"
1>c:\users\okuma\desktop\win32_gettingstarted\packages\microsoft.windows.implementationlibrary.1.0.200902.2\include\wil\common.h(587): error C2988: неопознанное объявление или определение шаблона
1>c:\users\okuma\desktop\win32_gettingstarted\packages\microsoft.windows.implementationlibrary.1.0.200902.2\include\wil\common.h(587): error C2059: синтаксическая ошибка: ,
1>c:\users\okuma\desktop\win32_gettingstarted\packages\microsoft.windows.implementationlibrary.1.0.200902.2\include\wil\common.h(773): error C2143: синтаксическая ошибка: отсутствие ";" перед "}"
1>C:\Program Files\Windows Kits\10\Include\10.0.17763.0\shared\strsafe.h(175): error C2065: STRSAFE_PCNZCH: необъявленный идентификатор
1>C:\Program Files\Windows Kits\10\Include\10.0.17763.0\shared\strsafe.h(175): error C2146: синтаксическая ошибка: отсутствие ")" перед идентификатором "psz"

Ответы (1 шт):

Автор решения: Artur
  1. Заменить Windows Implementation Library на ATL:

#include <wrl.h>

#include <wil/com.h>

Заменить на

#include <atlbase.h>

static wil::com_ptr<ICoreWebView2Controller> webviewController;

// Pointer to WebView window
static wil::com_ptr<ICoreWebView2> webviewWindow;

Заменить на

static CComPtr<ICoreWebView2Controller> webviewController;

// Pointer to WebView window
static CComPtr <ICoreWebView2> webviewWindow;

  1. Если после удачной компиляции будет ошибка компоновщика LINK1158: can’t run rc.exe, проделать действия из этого ответа.
→ Ссылка