Примеры графического интерфейса Windows 8, C++ и Metro?

Итак, я смотрю на этот Основной доклад по сборке Windows(Windows build keynote 1:42:56) И я просто не понимаю - что я могу использовать для создания GUI из C++ и/или языка GUI, который будет способен вызывать функции из моего кода C++? HTML, XAML или что? И где посмотреть пример кода выполнения примеров markup call code и code create GUI с помощью C++ для приложений Windows 8 Metro?


person Rella    schedule 14.09.2011    source источник
comment
Я думаю, что C и C++ на картинке указывают на то, что если вы создаете свой графический интерфейс с помощью WPF, вы можете P/Invoke собственный код или создавать COM-интерфейсы для вызова собственного кода.   -  person Praetorian    schedule 14.09.2011
comment
К вашему сведению, скоро будут представлены презентации BUILD с такими заголовками, как «Под прикрытием C++ для приложений в стиле Metro» «channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-690C   -  person Alex K.    schedule 14.09.2011
comment
см. также stackoverflow.com/questions/7416826/   -  person Ian Ringrose    schedule 14.09.2011


Ответы (3)



Если вы хотите вызвать код C++, самым простым способом будет использование C++ с расширениями компонентов. Это обычный C++, который компилируется в машинный код, однако у него есть несколько расширений (напоминающих C++/CLI), которые позволяют вам использовать COM-компоненты WinRT, не слишком беспокоясь о подключении COM.

С C++ и WinRT вы можете использовать XAML, как и управляемые языки, для определения пользовательского интерфейса. Это довольно аккуратно, см. документацию здесь:

Я не изучал это, но вы все еще можете использовать взаимодействие P/Invoke или COM на управляемых языках для вызова кода C++ для приложения в стиле Metro, однако это не подтверждено. Очевидно, что настольное приложение может делать все, что обычно.

person Ron Warholic    schedule 14.09.2011
comment
Вы можете использовать P/Invoke для перехода от .NET к C++ при условии, что ваша функция C++ не делает ничего, что запрещено песочницей приложения. Тем не менее, лучший способ сделать это — создать собственный компонент WinRT на C++, что очень просто с новыми языковыми расширениями, а затем использовать его из .NET. Попробуйте следующее: создайте новое решение приложения C#, затем добавьте к нему проект C++ типа WinRT Component DLL. Теперь вы можете добавить ссылку на проект из проекта C# в проект C++, и все общедоступные классы, определенные с помощью ref class, будут использоваться напрямую. Ради интереса, ILDASM свою сборку C# и загляните внутрь! - person Pavel Minaev; 14.09.2011
comment
Определенно круто. Хотя у меня смешанные чувства по поводу нестандартных расширений C++, все языки, стоящие вместе с WinRT, довольно приятны. Привязка данных к XAML из собственного кода C++ просто безумие. - person Ron Warholic; 14.09.2011
comment
На самом деле вам не нужны расширения для написания или использования компонентов WinRT на C++, они просто очень помогают по сравнению с чем-то вроде ATL с не совсем бесшовными интеллектуальными указателями и множеством макросов для QueryInterface и ему подобных. Лично я предпочитаю рассматривать их не как расширения языка, а рассматривать все это как новый язык, включающий C++ как полное подмножество — вроде того, как Objective-C относится к C. - person Pavel Minaev; 14.09.2011
comment
вам не нужно использовать P/Invoke для перехода с .Net на C++. Из документации Одной из основных особенностей новой модели является абстрактный двоичный интерфейс, или ABI, который определяет интерфейс для межъязыкового общения. В Windows Developer Preview собственный C++ может взаимодействовать через ABI с JavaScript и с управляемыми языками .NET C# и Visual Basic. - person Tinku; 15.09.2011
comment
@Павел Минаев - точно. Посмотрев документацию и на мгновение разозлившись на тот факт, что для написания нативных приложений WinRT потребуется по существу использование C++/CLI, я пришел к выводу, что именно так мог выглядеть .NET как с самого начала и в этом мире C# был бы совершенно не нужен. Теперь вы можете писать кросс-платформенный собственный код, просто не используя компоненты и объекты WinRT. Для этого вам не нужно полностью менять язык (и не заставляйте меня начинать с Mono, начните с кроссплатформенности и всего прочего — попробуйте KeePass2 на OS X). Я разогреваюсь до этой идеи. - person macbirdie; 16.09.2011
comment
@macbirdie Действительно, это идея. На самом деле, Херб Саттер в своем выступлении //BUILD специально рекомендовал, чтобы весь код, который не работает напрямую с WinRT, был написан с использованием стандартного ISO C++ для максимальной переносимости. Используйте расширения, когда вы вызываете библиотеки, расширяете их (производные элементы управления и т. д.) или пишете компоненты C++ для веб-приложения Metro. - person Pavel Minaev; 17.09.2011

Вы можете использовать код C++ для написания приложений в стиле метро. Вы также можете писать приложения на Javascript/HTML/CSS и вызывать API, написанные на C++ или C#/VB, из этих приложений JavaScript.

person ReinstateMonica Larry Osterman    schedule 14.09.2011
comment
Вызов C++ API из HTML+JS, если API не ориентированы на сервер-клиент JSON/XML, а скорее нативны для Windows, было бы забавно!) Не могли бы вы предоставить какие-либо ссылки на это через Metro? - person Rella; 15.09.2011
comment
См. это выступление: channel9.msdn.com/Events/BUILD/BUILD2011/TOOL- 531T для получения дополнительной информации. Ссылка должна появиться где-то 15 сентября 2011 г. - person ReinstateMonica Larry Osterman; 15.09.2011
comment
А еще лучше просто попробуйте это в Developer Preview. Создайте решение с проектом приложения JavaScript Metro, а затем добавьте к нему проект библиотеки C++ WinRT Component. Вы заметите, что можете добавить ссылку на проект JS и выбрать проект C++. Создайте его, а затем внимательно посмотрите на IntelliSense в JS — вы заметите, что он берет пространство имен из C++ и исследует, как проецируются классы внутри и их члены. - person Pavel Minaev; 15.09.2011