Подтвердить что ты не робот

Как я могу разработать универсальные приложения для Windows 10 с чистым С++, а не С++/CLI?

Я хочу разрабатывать универсальные приложения для Windows с использованием С++/DirectX/XAML. Но, похоже, нет способа избежать языка Microsoft С++/CLI. Я уже просматривал код, который по умолчанию не используется, когда вы создаете проект pty, и это все С++/CLI.

4b9b3361

Ответ 1

С++/CLI (/CLR) a.k.a. Управляемый С++ не поддерживается для универсальной платформы приложений Windows и не поддерживается для Windows 8 Store или Windows phone 8.

Что вы видите, это языковые расширения С++/CX (/ZW), которые используются в MSDN и в большинстве образцов С++ для использования API WinRT. Путаница, с которой вы сталкиваетесь, распространена, потому что одни и те же ключевые слова языка из С++/CLI были повторно использованы при реализации С++/CX. Не существует .NET Runtime, никакой сборки мусора и никакого интерпретируемого кода, как в С++/CLI. См. Раздел блога Visual С++ Team С++/CX Part 0 of [n]: Введение для более подробной истории С++/CX.

Вам не нужно использовать С++/CX для создания или использования WinRT-API, но их гораздо проще кодировать с использованием расширений языка С++/CX, чем чистый С++. Вы можете использовать библиотеку шаблонов С++ Windows Runtime Library (WRL), а не С++/CX, но вам, в основном, придется выяснить, как ваш собственный, так как есть очень мало образцов, которые используют его, и MSDN предполагает, что вы собираетесь использовать С++/CX.

В стандартных образцах используется Microsoft::WRL::ComPtr smart-pointer при работе с COM-интерфейсами, отличными от WinRT, например Direct3D, но обычно это единственная часть WRL, используемая стандартными образцами. Я использую WRL в DirectX Tool Kit, чтобы использовать некоторые конкретные API WinRT, если вы хотите увидеть некоторые ограниченные примеры использования его вместо С++/CX.

Для разработки API WinRT с WRL также требуется много ручной синхронизации с файлами MSIL для генерации необходимых метаданных (но не кода). Если вы являетесь экспертом в ATL, у вас будет возможность использовать WRL для разработки WinRT API, но в противном случае он, вероятно, не будет стоить производительности, чтобы полностью избежать С++/CX.

Тем не менее, вы можете легко изолировать использование С++/CX для определенных модулей в своем приложении. Я делаю это в своем Direct3D UWP Visual Studio шаблоне, так что большая часть кода на самом деле является "чистым" С++.

Ответ 2

Посмотрите Современный С++ для Windows Runtime

На странице описания проекта:

Современная библиотека С++ предоставляет стандартную версию языка С++ для Windows Runtime. Нет необходимости использовать нестандартные языковые расширения или критические интерфейсы и функции ABI. С Modern вы получаете власть библиотеки для Windows Runtime, независимо от того, хотите ли вы основанный на классах API или возможность перехода под капот для большего контроля.

Это выглядит как очень полная реализация.

<ч/" > Обновление (2016-10-07): автор Modern присоединился к Microsoft, чтобы продолжить работу над стандартным языком программирования на языке С++. Он был переименован в С++/WinRT и был недавно представлен на CppCon 2016 (см. Embracing Standard С++ для Windows Runtime (на YouTube)).

Предварительная версия библиотеки (просто файлы заголовков без компилятора) должна быть доступна в ближайшее время. В разговоре CppCon было объявлено, что "мы [Microsoft] надеемся скоро что-то получить для вас [нас]".