旧的本机应用程序可以在Windows8平板电脑上运行吗?

Ben*_*min 14 .net c# windows windows-8 windows-runtime

在此输入图像描述

我不太了解这张照片.在Metro风格的应用程序中,C/C++意味着什么?原生C/C++?或者它是托管C++?他们(Metro风格的应用程序)甚至没有Win32层!

要创建一个兼容Metro风格和桌面的应用程序,我们应该只使用.NET代码吗?旧的本机应用程序可以在Windows8 Tablet上运行吗?

dod*_*der 15

是旧的应用程序,包括用C/C++/Win32编写的非托管本机应用程序和.NET中的托管应用程序,可以在Windows 8平板电脑上运行.当然,平板电脑正在运行ARM处理器; 然后它只支持新的Metro风格的应用程序(以及专门针对ARM的应用程序).

在图片中,C/C++表示WinRT API上的非托管本机应用程序,它也是非托管本机的.对于想要使用C#或VB.NET的用户,将与.NET无缝集成.

在你的上一个问题上,你不能创建一个兼容Metro风格和桌面的应用程序......它们是互斥的 - 你必须做出选择.

  • Metro C++应用程序不受管理.尽管新语法与C++/CLI的外观相似,但它却是另一回事. (4认同)
  • @ HG1是的.你可以说WinRT的重要之处在于它让我们为C++(和JS,希望其他人加入这个乐趣)提供类似.NET的丰富的高级类库,而不必依赖于CLR及其服务,如GC和JIT. (3认同)
  • @Pavel谢谢你的清晰度 - 所以地铁C++使用的是XAML而不是托管的.net?那很奇怪;-) (2认同)
  • "当然,如果平板电脑正在运行ARM处理器,那么它只会支持新的Metro风格的应用程序." - 我的理解是,即使是由开发人员移植到ARM的旧应用程序也可以在ARM处理器上运行. (2认同)

Mic*_*tum 5

WinRT是本机代码,C/C++是本机代码,尽管它们与WinRT一起使用时的语法类似于C++/CLI.从我听到的,它似乎是一个专为C++而不是C设计的API,所以它非常面向对象,人们似乎很兴奋.

C#将使用通常的COM Interop方式来使用WinRT.

引用Andy Rich(MSFT)的讨论:

核心WinRT不受管理 - 它是原生的和基于COM的.我们的语言在高级语法中提供完全原生的投影,但您不依赖于该语法 - 您将能够使用低级COM或WRL(类似ATL的模板库)来定位Windows运行时)以及.(C#/ VB投影是一个不同的故事,它们生成运行时可调用的包装器对象,它们在.NET和WinRT之间编组.)

  • 你想要这个:http://msdn.microsoft.com/en-us/library/windows/apps/hh454076(v = VS.85).aspx.基本上它看起来很像C++/CLI,但存在差异,输出是纯本机代码.因此,没有GC,`^`类型实际上是refcounted智能指针,字符串是`HSTRING`. (3认同)
  • 所以听起来他们编译成本地运行的东西,但他们重新定义了本机c ++意味着什么(真正的c ++基于真正发布的标准)?听起来像(托管c ++)++; (2认同)
  • @Brian"Native"一直意味着"不是字节码"/"不需要VM运行".你在这里考虑"标准C++".现在,因为这最终是COM,你可以使用普通的旧C++.有一个名为WRL的库,类似于ATL,它允许您使用一堆智能指针和其他帮助程序类以及实现接口的宏来完成.但是,与COM一样,处理麻烦也是一件麻烦事 - 你最终会得到2x-3x代码来完成同样的任务,大部分代码都是样板,而且无论如何都是不可移植的,因为你使用的是WinRT API.另请注意,标准C++仍然是一个完整的子集. (2认同)