синхронизация SDK с обновлением Windows 10 и использование WinRT со стандартным C ++ - PullRequest
0 голосов
/ 08 мая 2018

Я начал экспериментировать с C ++ / WinRT, используя Visual Studio 2017 Community Edition. Теперь у меня есть среда, в которой я могу создать отладочную версию примера приложения и запустить его. Я должен был:

  • загрузите и установите последнюю версию Windows 10 SDK
  • обновление Visual Studio 2017 с помощью пакета C ++ / WinRT и шаблонов
  • обновление ОС Windows 10 до последней сборки, сборка 1803

В документации и на веб-страницах рассказывалось об обновлении пакета C ++ / WinRT до Visual Studio, и при попытке компиляции примера произошла ошибка, указывающая на загрузку и установку последней версии Windows 10 SDK.

Когда я попытался запустить отладочную сборку примера приложения, я обнаружил, что мне также нужна Windows 10 Build 1803.

Является ли Windows 10 Build 1803 требованием для запуска приложений с использованием Stadard C ++ и C ++ / WinRT или у меня был опыт использования сборки Debug?

Означает ли это, что люди, которые не обновили свою установку Windows 10 хотя бы до Windows 10 Build 1803, не смогут запустить приложение, разработанное с помощью C ++ / WinRT?

Возможно ли, что корпоративный или корпоративный клиент решит исключить необходимые компоненты C ++ / WinRT, когда он выполнит специфичное для предприятия обновление со своих собственных серверов с собственным набором обновлений, так что приложение C ++ / WinRT не сможет выполнить бежать в их среде?

Существует ли какая-либо упаковка, чтобы необходимые компоненты C ++ / WinRT могли быть включены в приложение?

Приложение: два тестовых приложения

Я заново попробовал два тестовых приложения, с которыми работал. Эта попытка повторяется после внесения изменений в установку последней версии Windows 10 SDK, 10.0.17134, установку расширения C ++ / WinRT Visual Studio и обновление моего ПК до Windows 10 1803.

Первым приложением C ++ / WinRT, которое я попробовал, было консольное приложение из статьи Кенни Керра, C ++ - Представляем C ++ / WinRT , в котором был следующий пример приложения:

#pragma comment(lib, "windowsapp")
#include "winrt/Windows.Foundation.h"
#include "winrt/Windows.Web.Syndication.h"
using namespace winrt;
using namespace Windows::Foundation;
using namespace Windows::Web::Syndication;
int main()
{
  initialize();        // NOTE: Generates compiler error C3861: 'initialize': identifier not found
  Uri uri(L"http://kennykerr.ca/feed");
  SyndicationClient client;
  SyndicationFeed feed = client.RetrieveFeedAsync(uri).get();
  for (SyndicationItem item : feed.Items())
  {
    hstring title = item.Title().Text();
    printf("%ls\n", title.c_str());
  }
}

В конце концов я разработал процедуру создания, компиляции и запуска этого тестового источника следующим образом. Начиная с открытия Visual Studio 2017 Community Edition, я сделал следующее:

  • Файл -> Создать -> Проектировать и использовать Windows Desktop, шаблон приложения Windows Console
  • сохраняя #include "stdafx.h", но замените созданный шаблон main() указанным выше источником
  • щелкните правой кнопкой мыши решение в обозревателе решений, выберите Свойства, откройте C / C ++ -> Язык и измените «Стандарт языка C ++» на «Стандарт ISO C ++ 17 (/ std: c ++ 17)»

«Версия Windows SDK» в «Свойствах конфигурации» -> «Общие» была установлена ​​на 10.0.17134.0.

Сборка завершилась с ошибкой компиляции error C3861: 'initialize': identifier not found. Дальнейшие поиски нашли эту статью, cppwinrt.exe в Windows SDK , которая содержала пример приложения, в котором вместо initialize(); использовалось init_apartment();, поэтому с этим изменением мое приложение-пример компилируется и запускается, создавая список статей. как вывод.

В этой статье Microsoft Docs, Начало работы с C ++ / WinRT , датированной 07/07/2018, приведен пример консоли, в котором используется init_apartment(); вместо initialize(). Этот пример также является каналом синдикации, но с другим URL.

Во втором тестовом приложении использовался шаблон C ++ / WinRT «Windows Universal» -> «Пустое приложение (C ++ / WinRT)», который генерировал пример приложения, которое компилировалось и запускалось. В диалоговом окне «Свойства» -> «Общие» «Версия целевой платформы» была установлена ​​на 10.0.17134.0, а «Минимум целевой платформы» была установлена ​​на 10.0.15063.0.

1 Ответ

0 голосов
/ 08 мая 2018

Проекции C ++ / WinRT - это просто заголовки C ++. Сами по себе они не предъявляют особых требований времени выполнения, кроме используемых вами API среды выполнения Windows.

Реальный вопрос заключается в том, какие API вы используете в своем приложении (либо через C ++ / WinRT, либо с помощью расширений языка C ++ / CX (он же /ZW)), и какое значение вы указали в качестве значения WindowsTargetPlatformMinVersion при вы создаете свое приложение UWP.

Если для WindowsTargetPlatformVersion установлена ​​последняя версия Windows 10 SDK (17134), вы можете установить минимальную требуемую версию ОС для вашего приложения UWP на 17134, 16299, 15063, 14393, 10586 или 10240. Вам нужно будет протестировать ваше приложение на этой версии и убедитесь, что вы защищаете любое использование более новых API.

С практической точки зрения вам не нужно поддерживать 10240, поэтому в Visual Studio для нового проекта по умолчанию используется значение 10586. Для потребительских выпусков 14393 - это столько же лет, сколько вы когда-либо можете встретить в реальном мире. .

...