Windows Phone 7和本机C++/CLI

Fab*_*llo 37 jit arm native c++-cli windows-phone-7

微软最近发布了新的Phone 7平台的工具和文档,让那些拥有大型C++代码库的人(比如我)感到沮丧,不再支持本机开发了.虽然我发现有关这一决定被推翻的猜测,但我对此表示怀疑.所以我想通过调整它在C++/CLI下进行编译来使Phone 7可用的代码库是多么可行.当然用户界面部件无法移植,但我不确定其余部分.有人有类似的经历吗?我不是在谈论那些做重度低级的东西的代码 - 但是经常使用模板和智能指针.

adr*_*anm 11

您可以使用/ clr:safe选项在C++/CLI中生成可验证的托管代码.问题是大多数普通的c ++代码都不会使用该选项进行编译.


And*_*ent 11

理论上,c ++/cli可以与WPF/Silverlight一起使用,使用可以在代码隐藏文件中的主类中使用的宏定义替换从XAML生成的C#的技巧.我研究了这种技术,但没有把它超越理论的动机 - 我很高兴混合语言.

至于在逻辑代码的纯安全模式下使用c ++/cli,这可能仍然不可能,但我很想听听有人如何尝试它.在2008年为Silverlight进行研究时,我发现这个令人生畏的Silverlight论坛评论:

我只是通过将我的C++项目中的MSIL编译成与Silverlight兼容的DLL来尝试Silverlight和C++.好消息:它有效,您可以从Silverlight项目中调用此代码.坏消息:C++编译器显然使用了Silverlight不允许的MSIL指令.

因此,如果你尝试这个,即使使用最简单的程序,你几乎会立即得到异常"操作可能会破坏运行时的稳定性".对我来说,这使得我们很快就会看到Silverlight for C++,因为编译器需要表现得有点不同.


Ric*_*ner 9

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

我完全希望MS将来也会增加对VB和C++/CLI的支持,但是不要期望很快打开本机代码和服.

本机代码只有很多问题需要克服,特别是在安全性,可靠性等方面.管理代码更容易进行静态验证,并且FAR在运行时更容易控制.

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

根据我们自己的经验,将编写良好的C++移植到C#的过程实际上比最初预期的要少得多.当然,有一个学习曲线,但你有任何端口.我们实际上从将核心应用程序和数据引擎移植到C#中获得了很多好处,我们将整个团队重新编写为C#代码,并在必要时将C#移回C++,而不是反过来!到目前为止,我们只将两个模块移植回C++,并通过interop从我们的本机代码调用我们的C#代码.

再次,请记住,WinPhone是一个全新的平台,使用最好的,高效的,下一代开发工具和平台.这不是你父亲的WinMo.

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

Update1:​​2012-12-17:

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

虽然目前Windows8/Phone8平台与API之间没有100%的兼容性,但我预计这两个平台将在接下来的几个版本中日益集成.

现在尤其如此,Windows与微软其他团队之间更密切合作的一个主要障碍最近离开了公司;)

Update2:2014年4月15日:

根据// BUILD/2014最近的公告,您现在可以开始使用C++和XAML,C#/ VB和XAML或将在Windows 8.1,Windows Phone 8.1和Xbox One上运行的JavaScript和HTML构建"通用"应用程序!有关构建Windows Phone 8.1 Universal Apps的更多详细信息,请阅读本文.

  • 用精心编写的C++是什么意思?有很多方法可以做C++.正确性取决于你使用它的原因.所以我猜,"编写得很好的C++"有点主观......"另一方面,Objective-C++确实完全支持C++,并且似乎有很多开发人员依赖它来实现性能密集型(或者基于库的应用程序 (3认同)
  • 我所说的"编写良好的C++"的意思是代码是可维护的,遵循合理的工程实践,不泄漏,不阻塞线程,不依赖于特定于机器的方面,如字节排序或机器字长等. (3认同)