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

时间:2011-09-15 06:02:38

标签: c# .net windows windows-8 windows-runtime

enter image description here

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

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

5 个答案:

答案 0 :(得分:15)

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

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

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

答案 1 :(得分:5)

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

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

引用this discussion中的Andy Rich(MSFT):

  

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

答案 2 :(得分:4)

Metro应用程序中的C ++是本机C ++。建议您使用new language extensions,它看起来很像C ++ / CLI,并提供类似的高级体验 - 例如无需手动处理引用计数对象和字符串,或实现和调用QueryInterface - 但在纯本机代码中。但是,您不必这样做。

在任何情况下,对于您自己的类,您可以在vanilla C ++中定义它们,并将它们编译到库中。这样,您可以在应用程序的桌面版本(使用MFC,Win32,Qt或其他任何方式实现UI)和Metro版本(使用WinRT API实现UI)之间共享逻辑。同样,对于.NET应用程序,您可以将逻辑分离为在桌面和Metro之间重用的类库。

没有办法编写一个可以在同一个UI层上运行的应用程序,无论是在C ++还是在.NET中。另一方面,您可以使用HTML / JS在某种程度上近似,如果您避免使用WinRT API并坚持HTML5标准 - 那么您可以通过在浏览器中托管它来制作“桌面版”。

答案 3 :(得分:2)

我是一名专业的软件开发人员,虽然我主要编写基于Web的企业应用程序,但我还是使用过Visual Studio 2012和Windows 8.以下是我发现的内容:

由于Metro现在是一个禁止使用的术语,我将使用术语“平板电脑应用程序”来指代全屏应用程序,使用“桌面应用程序”来指代在Windows桌面上运行的程序。

  

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

所有平板电脑应用都使用托管代码。这是因为WinRT操作系统无法运行x86或AM64指令。不过,两个版本都可以运行.Net代码。因此,所有WinRT应用程序都必须使用托管代码,使用XAML UI,并且只能通过Windows应用商店分发。

  

要创建兼容Metro风格和桌面的应用程序,我们应该只使用.NET代码吗?

是。这是完全正确的。您必须使用.Net代码。旧的本机应用程序无法在Windows 8平板电脑上运行。如果您像大多数通过实践学习的Windows开发人员一样,则需要调整编写代码的方式。

以下是我如何接近它:

需要在不同外形尺寸(平板电脑,台式机,手机)上运行的基本程序将有3个类。 Model和Controller类将在DLL中实现,以及定义GUI事件和方法的Interface文件。实际进入我的.EXE文件的唯一事情就是GUI。 GUI中唯一的逻辑基本上是当用户在需要程序执行某些操作的表单上执行操作时引发事件。

例如,用户在文本字段中填写他的名字,然后点击“提交”。这会引发一个Submitted事件,并将Name框中的值作为参数。控制器可以使用一种方法将反馈发送回表单,例如UpdateStatus()

听起来很复杂,需要更多的前期设计。这个系统的优点在于,一旦你为一个外形尺寸实现程序,你所要做的就是修改你的XAML以获得其他形状因子。您的控制器和模型根本不会改变。 (我确信有人会指出如何使用XAML模板来做到这一点,但我还没有。)

答案 4 :(得分:1)

与Windows 7一样,64位Windows不支持旧的16位应用程序。除此之外,是的,支持本机应用程序。