Windows Phone 7和本地C ++ / CLI

微软最近发布了新的Phone 7平台的工具和文档,让那些拥有C ++代码库的人(像我一样)不再支持本地开发。 虽然我发现这个决定被推翻了,但我对此表示怀疑。 所以我在想,如何让这个代码库可以通过C ++ / CLI编译来实现Phone 7的可行性。 当然,用户界面部分无法移植,但我不清楚其余部分。 任何人都有类似的经历? 我不是在讨论那些低层次的代码 – 但是模板和智能指针的使用相当频繁。

从理论上说,c ++ / cli可以和WPF / Silverlight一起使用,用一个macros定义代替从XAML生成的C#,这个macros定义可以在代码后面的主类中使用。 我制定了这个技术,但没有动力去超越理论 – 我很高兴混合语言。

至于在纯粹的安全模式下使用c ++ / cli作为你的逻辑代码,这可能还是不可能的,但是我很想听听有人现在怎么尝试。 虽然在2008年对Silverlight进行研究时,我发现这个令人畏惧的silverlight论坛评论 :

我刚刚给Silverlight和C ++试了一下,把我的C ++项目中的MSIL编译成兼容Silverlight的DLL。 好消息:它可以工作,并且可以从Silverlight项目调用此代码。 坏消息:C ++编译器显然使用Silverlight禁止的MSIL指令。

所以,如果你尝试这个,即使是最简单的程序,你也会马上得到exception“操作会破坏运行时”。 对我来说,这使得我们很快就会看到Silverlight for C ++的可能性不大,因为编译器需要performance得有点不同。

您可以使用/ clr:safe选项在C ++ / CLI中生成可validation的托pipe代码。 问题是,你的大多数正常的c + +代码将不会编译该选项。

C#是目前唯一支持 WinPhone7的语言。

我完全期待MS将来也会join对VB和C ++ / CLI的支持,但是不要指望很快就能打开本地代码和服了。

原生代码只是有太多的问题需要克服,特别是围绕安全性,可靠性等。托pipe代码是FAR更容易静态validation和FAR更容易控制,而运行。

如果你对将C ++代码移植到C#感到不安,那么MS很高兴,并不强迫你移动到Objective-C;)

从我们自己的经验来看,将精心编写的C ++移植到C#的过程实际上比起初期望的要less得多。 当然,有一个学习曲线,但你有任何端口。 实际上,我们将我们的核心应用程序和数据引擎移植到C#中,从而使我们的整个团队重新编写C#代码,并在必要时将C#移回C ++,而不是相反。 到目前为止,我们只将两个模块移植回C ++,而不是通过interop从本地代码中调用我们的C#代码。

同样,请记住,WinPhone是一个全新的平台,它使用最好的,高生产力的下一代开发工具和平台。 这不是你父亲的WinMo。

如果您认为对C ++的支持至关重要,那么请确保MS知道 – (尊重和专业)陈述您在MSDN论坛和您附近的开发者活动中的位置。

更新1:2012-12-17:

虽然本地C ++仍然没有正式支持Windows Phone 7,但Windows Phone 8现在支持本地C ++代码,因此您可以更轻松地将现有的C ++代码库移植到Windows Phone 8(以及Windows 8和Windows桌面应用程序) 。

虽然目前Windows8 / Phone8平台与API之间不存在100%的兼容性,但我预计这两个平台在接下来的几个版本中将会越来越集成。

现在尤其如此,Windows与微软其他团体之间密切合​​作的关键障碍之一最近离开了公司;)

Update2:4/15/2014:

根据最近在// BUILD / 2014发布的声明,您现在可以开始在Windows 8.1,Windows Phone 8.1和Xbox One上运行C ++&XAML,C#/ VB&XAML或JavaScript&HTML构build“通用” 有关构buildWindows Phone 8.1 Universal Apps的更多详细信息,请阅读本文

整个开发思路是build立在Silverlight之上的。 我认为你可以添加你用C ++编写的托pipedll而不会有任何问题,但是它不能使用本地代码。

我打算今晚在我的机器上安装这些工具,并会试用这个。

如果MS决定离开这条路并创造一些新的东西,那就是MS的决定。 所以让我们面对事实。 Silverlight还没有成功。 MS由于苹果,Android和RIM而失去了重要的份额。 应用程序开发人员只需评估自己应用程序的商业案例,并决定是否信任Windows 7手机的份额收益。 对于我所经营的公司,我们决定不再支持MS Windows Phone 7,不是因为这个或者其他的技术原因,而只是因为我们不相信港口的投资回报。 如果我们看到这个新平台的市场成功,我们将在未来开始支持苹果,Symbian,Andoid和MeeGo。 全部支持C / C ++,使我们能够重用我们久经考验的应用程序内核。 那么为什么要担心。 个人技术偏好不应该是门控的。 如果个人喜好担心的话,那么我会把MS踢出去,让他看着我那丑陋的UI。

托马斯

终于在地平线上了!

所以调查发送给windows手机开发者关于他们未来的发展偏好和XNA在调查中没有提到过(调查发送给windows手机开发者 – 我是否提到过)

但他们却问:

您如何在移动应用/游戏中使用C ++?

  • 从上到下开发C ++应用程序/游戏(UI,业务逻辑和平台API)
  • 使用C ++进行业务逻辑,然后编写平台抽象层
  • 使用C ++作为业务逻辑使用第三方运行时引擎
  • 我不想用C ++