Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 旧的本机应用程序能否在Windows8平板电脑版本上运行?_C#_.net_Windows_Windows 8_Windows Runtime - Fatal编程技术网

C# 旧的本机应用程序能否在Windows8平板电脑版本上运行?

C# 旧的本机应用程序能否在Windows8平板电脑版本上运行?,c#,.net,windows,windows-8,windows-runtime,C#,.net,Windows,Windows 8,Windows Runtime,我不太懂这幅画。 在Metro风格的应用程序中,C/C++意味着什么?本机C/C++?或者它是C++管理的吗?他们(Metro风格的应用程序)甚至没有Win32层 要使应用程序同时兼容Metro风格和桌面,我们是否应该只使用.NET代码?旧的本机应用程序可以在Windows8平板电脑上运行?与Windows 7一样,64位Windows不支持旧的16位应用程序。除此之外,还支持本机应用。WinRT是本机代码,C/C++是本机代码,尽管它们与WinRT一起使用时的语法看起来像C++/CLI。从我所

我不太懂这幅画。 在Metro风格的应用程序中,C/C++意味着什么?本机C/C++?或者它是C++管理的吗?他们(Metro风格的应用程序)甚至没有Win32层


要使应用程序同时兼容Metro风格和桌面,我们是否应该只使用.NET代码?旧的本机应用程序可以在Windows8平板电脑上运行?

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

WinRT是本机代码,C/C++是本机代码,尽管它们与WinRT一起使用时的语法看起来像C++/CLI。从我所听到的,它看起来像是一个API,它是针对C++而不是C设计的,所以它非常面向对象,人们似乎相当兴奋。 C#将使用COM互操作的常用方式来使用WinRT

引用安迪·里奇(MSFT)的话:

核心WinRT不受管理-它是本机的,基于COM。我们的语言在高级语法中提供了一个完全本地的投影,但您不受该语法的限制-您也可以使用低级COM或WRL(类似ATL的模板库)来定位Windows运行时。(C#/VB投影是另一回事,它们生成运行时可调用的包装器对象,在.NET和WinRT之间封送。)


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

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


关于你的最后一个问题,你不能制作一个既兼容Metro风格又兼容桌面风格的应用程序。。。它们是互斥的,你必须做出选择。在地铁应用中,

< P> C++是本地C++。建议您使用,它看起来很像C++/CLI,并提供类似的高级体验-例如,无需手动处理引用计数对象和字符串,或实现和调用
QueryInterface
,但使用纯本机代码。不过,你不必这么做

无论如何,对于自己的类,可以用香草C++定义它们,并将它们编译成一个库。通过这种方式,您可以在应用程序的桌面版本(使用MFC、Win32、Qt等实现UI)和Metro版本(使用WinRT API实现UI)之间共享逻辑。类似地,对于.NET应用程序,您可以将逻辑分离到一个类库中,在desktop和Metro之间重用


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

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

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

我不太懂这幅画。在Metro风格的应用程序中,C/C++意味着什么?本机C/C++?或者它是C++管理的吗?他们(Metro风格的应用程序)甚至没有Win32层

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

要使应用程序同时兼容Metro风格和桌面,我们是否应该只使用.NET代码

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

以下是我的做法:

需要在不同外形(平板电脑、台式机、手机)上运行的基本程序将有3个类。模型和控制器类将与定义GUI事件和方法的接口文件一起在DLL中实现。唯一真正进入我的.EXE文件的是GUI。GUI中唯一的逻辑基本上是在用户对表单执行需要程序执行某些操作的操作时引发事件

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


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

当然,本机应用程序的运行方式与Windows资源管理器本身的运行方式类似,就像右侧的普通桌面应用程序一样。我想本地C/C++应用程序也可以使用Metro,正如我在左边看到的,有些C/C++甚至在没有XAML的情况下也可以使用Metrobottom@Mystere我说的是Metro风格的应用程序。据我所知,metro应用程序无法使用Win32。metro应用程序可以使用的Win32 API子集现在记录在。这也适用于.NET应用程序,它可以使用P/Invoke和COM Interop调用它,与往常一样