Могут ли старые родные приложения работать в версии для Windows8?

enter image description here

Я не очень хорошо понимаю эту картину. Что означает C/С++ в приложениях стиля Metro? Нативный C/С++? или он управляется С++? Они (приложения в стиле Metro) даже не имеют слоя Win32!

Чтобы создать приложение, совместимое с стилем Metro и Desktop, следует ли использовать только .NET-код? Старые родные приложения могут работать на планшете Windows8?

Ответы

Ответ 1

Да, старые приложения, в том числе неуправляемые собственные приложения, написанные на C/С++/Win32 и управляемые в .NET, будут работать на планшете Windows 8. Кроме того, если на планшете установлен процессор ARM; то он будет поддерживать только новые приложения Metro-стиля (а также приложения, специально предназначенные для ARM).

На картинке C/С++ означает неуправляемые родные приложения, сидящие на WinRT API, который также неуправляемый. Будет интеграция с .NET для тех, кто хочет использовать С# или VB.NET.

В последнем вопросе вы не можете создать приложение, совместимое как с Metro-style, так и с Desktop... они взаимоисключающие - вам нужно сделать выбор.

Ответ 2

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

С# будет использовать обычный способ COM Interop для использования WinRT.

Процитировать Andy Rich (MSFT) от это обсуждение:

Core WinRT НЕ управляется - он является родным и основанным на COM-интерфейсе. Наш язык обеспечивает полномасштабную проецирование этого в синтаксисе высокого уровня, но вы не привязаны к этому синтаксису - вы сможете настроить таргетинг на Windows Runtime с помощью низкоуровневого COM или WRL (ATL-подобной библиотеки шаблонов ) также. (Проекция С#/VB - это совсем другая история, они создают объекты оболочки, вызывающие время выполнения, которые маршалируют между .NET и WinRT.)

Ответ 3

С++ в приложениях Metro является родным С++. Рекомендуется использовать новые языковые расширения, которые очень похожи на С++/CLI и обеспечивают аналогичный высокоуровневый опыт - например, нет необходимости вручную обрабатывать объекты подсчета ссылок и строки, или реализовать и вызывать QueryInterface, но в чистом собственном коде. Вам не обязательно это делать.

В любом случае для ваших собственных классов вы можете определить их в ваниле С++ и скомпилировать их в библиотеку. Таким образом, вы можете делиться своей логикой между настольной версией вашего приложения (с интерфейсом пользователя, реализованным с использованием MFC, Win32, Qt или что-то еще) и версией Metro (с пользовательским интерфейсом, реализованным с использованием API WinRT). Аналогично, для приложений .NET вы можете отделить логику в библиотеке классов, которая повторно используется между рабочим столом и Metro.

Невозможно написать одно приложение, которое будет работать на обоих с одним и тем же слоем пользовательского интерфейса, ни на С++, ни на .NET. С другой стороны, вы можете в некоторой степени приблизиться к HTML/JS, если вы избегаете использования API WinRT и придерживаетесь стандарта HTML5, - тогда вы можете сделать "настольную версию", разместив его в браузере.

Ответ 4

Я профессиональный разработчик программного обеспечения, и хотя я пишу главным образом корпоративные веб-приложения, я играл с Visual Studio 2012 и Windows 8. Вот что я обнаружил:

Поскольку Metro теперь является verboten термином, я буду использовать термин "Приложения для планшета", чтобы ссылаться на полноэкранные приложения и "Настольные приложения", чтобы ссылаться на программы, запущенные на рабочем столе Windows.

Я не очень хорошо понимаю эту картину. Что означает C/С++ в приложениях стиля Metro? Нативный C/С++? или он управляется С++? Они (приложения в стиле Metro) даже не имеют слоя Win32!

Все приложения для планшетов используют управляемый код. Это связано с тем, что операционная система WinRT не может выполнять инструкции x86 или AM64. Обе версии могут работать .Net-код просто отлично. Таким образом, все приложения WinRT должны использовать управляемый код, использовать пользовательский интерфейс XAML, и они будут распространяться только через Windows Store.

Чтобы создать приложение, совместимое с стилем Metro и Desktop, следует ли использовать только .NET-код?

Да. Это точно. Вы должны использовать .Net-код. Старые, родные приложения не могут запускаться на планшете Windows 8. Если вы похожи на большинство разработчиков Windows, которые узнали об этом, это потребует корректировки того, как вы пишете код.

Вот как я приближаюсь к нему:

Базовая программа, которая должна работать на разных форм-факторах (планшет, рабочий стол, телефон), будет иметь 3 класса. Классы Model и Controller будут реализованы в DLL вместе с файлом интерфейса, который определяет события и методы GUI. Единственное, что действительно входит в мои .EXE файлы, - это графический интерфейс. И единственная логика в графическом интерфейсе - это, в основном, повышение события, когда пользователь выполняет действия в форме, которые требуют, чтобы программа что-то делала.

Например, пользователь заполняет свое имя в текстовом поле, затем нажимает "Отправить". Это привело бы к событию Submitted со значением из поля Name в качестве параметра. Контроллер может отправить обратную связь обратно в форму с помощью метода, такого как UpdateStatus()

Это звучит сложно, и он требует большего дизайна. Красота этой системы заключается в том, что как только вы реализуете программу для одного форм-фактора, все, что вам нужно сделать, это изменить ваш XAML для других форм-факторов. Ваш контроллер и ваша модель вообще не меняются. (Я уверен, что кто-то укажет, как использовать шаблоны XAML для этого, но я еще не там.)

Ответ 5

Как и в Windows 7, 64-разрядная версия Windows не поддерживает старые 16-разрядные приложения. Кроме того, да, родные приложения поддерживаются.