Вопрос

Microsoft недавно выпустила инструменты и документацию для своей новой платформы Phone 7, которая, к ужасу тех, у кого большая кодовая база C++ (таких как я), больше не поддерживает нативную разработку.Хотя я встречал предположения об отмене этого решения, я в этом сомневаюсь.Поэтому я подумал, насколько целесообразно было бы сделать эту кодовую базу доступной для Phone 7, адаптировав ее для компиляции под C++/CLI.Конечно, части пользовательского интерфейса портировать не удалось, но в остальном я не уверен.У кого-нибудь был подобный опыт?Я не говорю о коде, выполняющем тяжелые низкоуровневые операции, но здесь довольно часто используются шаблоны и интеллектуальные указатели.

Это было полезно?

Решение

C++/cli теоретически можно использовать с WPF/Silverlight, используя трюк замены C#, сгенерированного из XAML, определением макроса, которое можно использовать внутри основного класса в коде файла.Я разработал эту технику, но у меня не было мотивации выходить за рамки теории — я вполне доволен смешиванием языков.

Что касается использования C++/cli в чисто безопасном режиме для вашего логического кода, это все еще может быть невозможно, но мне бы хотелось услышать, как кто-нибудь попробует это сейчас.Исследуя его для Silverlight еще в 2008 году, я обнаружил, что это устрашает. комментарий на форуме Silverlight:

Я только что попробовал Silverlight&C++, скомпилировав MSIL из моего проекта C++ в совместимую с Silverlight DLL.Хорошие новости:это работает, и вы можете вызвать этот код из проекта Silverlight.Плохие новости:Компилятор C++, очевидно, использует инструкции MSIL, которые Silverlight запрещает.

Итак, если вы попробуете это, даже с самой простой программой, вы почти сразу получите исключение. «Операция может дестабилизировать среду выполнения». На мой взгляд, это снижает вероятность того, что мы скоро увидим Silverlight для C++, поскольку компилятору придется вести себя совсем по-другому.

Другие советы

Вы можете создать проверяемый управляемый код в C++/CLI, используя параметр /clr:safe.Проблема в том, что большая часть вашего обычного кода на C++ не будет компилироваться с этой опцией.

C# в настоящее время является единственным поддерживается язык для WinPhone7.

Я полностью ожидаю, что MS также добавит поддержку VB и C++/CLI в будущем, но не ожидайте открытия кимоно нативного кода в ближайшее время.

У нативного кода слишком много проблем, которые нужно преодолеть, особенно в области безопасности, надежности и т. д.Управляемый код НАМНОГО легче статически проверять и НАМНОГО легче контролировать во время работы.

Если вы расстроены переносом кода C++ на C#, просто порадуйтесь, что MS не заставила вас перейти на Objective-C;)

По нашему собственному опыту, процесс переноса хорошо написанного C++ на C# на самом деле требует гораздо меньше усилий, чем можно было на первый взгляд ожидать.Конечно, есть кривая обучения, но она есть у любого порта.На самом деле мы получили настолько большую выгоду от переноса нашего основного приложения и механизмов обработки данных на C#, что переоборудовали всю нашу команду для написания кода на C# и перенесли наш C# обратно на C++, где это необходимо, а не наоборот!До сих пор мы перенесли обратно на C++ только два модуля и вместо этого вызывали наш код C# из собственного кода через взаимодействие.

Опять же, помните, что WinPhone — это совершенно новая платформа, использующая лучшие в своем классе высокопроизводительные инструменты и платформы разработки нового поколения.Это не WinMo твоего отца.

Если поддержка C++ — это то, что вы считаете критически важным, убедитесь, что MS знает об этом — (уважительно и профессионально) изложите свою позицию на форумах MSDN и на мероприятиях для разработчиков рядом с вами.

Обновление1:17 декабря 2012 г.:

Хотя собственный C++ по-прежнему официально не поддерживается для Windows Phone 7, Windows Phone 8 теперь поддерживает собственный код C++, поэтому вы можете легче переносить существующую кодовую базу(ы) C++ на Windows Phone 8 (а также Windows 8 и настольные приложения для Windows). .

Хотя на данный момент не существует 100% совместимости между платформами Windows8/Phone8 и API, я ожидаю, что эти две платформы станут более интегрированными в течение следующих нескольких выпусков.

Это особенно актуально сейчас, когда один из ключевых барьеров на пути более тесного сотрудничества между Windows и другими группами Microsoft недавно покинул компанию ;)

Обновление2:15.04.2014:

Согласно недавним объявлениям на //BUILD/ 2014, теперь вы можете начать создавать «универсальные» приложения на C++ и XAML, C#/VB и XAML или JavaScript и HTML, которые будут работать на Windows 8.1, Windows Phone 8.1 и Xbox One!Дополнительные сведения о создании универсальных приложений для Windows Phone 8.1 см. прочитайте эту статью.

Вся идея разработки построена на Silverlight.Я думаю, вы можете без проблем добавить свою управляемую dll, написанную на C++, в этот проект Silverlight, но он не сможет использовать собственный код.

Сегодня вечером я планирую установить инструменты на свою машину и опробую это.

Ничего страшного, если MS решит сойти с пути и создать что-то новое, это решение MS.Итак, давайте посмотрим правде в глаза.Silverlight пока не имеет успеха.MS потеряла значительную долю из-за Apple, Android и RIM.Разработчикам приложений просто нужно оценить экономическое обоснование своих собственных приложений и решить, верят ли они в увеличение доли продаж телефонов с Windows 7 или нет.В компании, которой я руковожу, мы решили больше не поддерживать MS Windows Phone 7 не по той или иной технической причине, а просто потому, что мы не верим в возврат наших инвестиций в порт.Мы начнем поддерживать Apple, Symbian, Andoid и MeeGo в будущем, если увидим рыночный успех этой новой платформы.Все они поддерживают C/C++ и позволяют нам повторно использовать проверенные ядра приложений.Так зачем вообще волноваться.Личные технологические предпочтения не должны быть преградой.Если беспокоят личные предпочтения, то я бы выгнал MS из-за их уродливого на мой взгляд пользовательского интерфейса.

Томас

Это на горизонте окончательно!

Таким образом, опрос, отправленный разработчикам Windows Phone об их будущих предпочтениях в разработке, и XNA не упоминается один раз в опросе (опрос, отправленный разработчикам Windows Phone - я упоминал об этом)

Однако они спрашивают:

Как бы вы предпочли использовать C++ в своих мобильных приложениях/играх?

  • Разработать приложения/игры, которые являются C ++ сверху вниз (пользовательский интерфейс, бизнес -логика и API платформы)
  • Используйте C++ для бизнес-логики, а затем напишите уровень абстракции платформы.
  • Используйте C++ для бизнес-логики, используйте сторонние механизмы выполнения.
  • Я не хочу использовать C++
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top