Windows Store app 开发语言

来源:互联网 发布:最好吃的方便面知乎 编辑:程序博客网 时间:2024/06/09 18:55

从技术上讲,所有的win32,com和winrt api 都可以被桌面应用和商店应用程序调用,但由于商店应用的app容器的安全上下文,好多调用会失败。如果调用了的话,会违反设计原则,将不会通过系统认证。商店应用可以调用的win32和COM API 在下面的网址有详细说明:

http://msdn.microsoft.com/en-us/library/windows/apps/br205757

有时候我会用win32的MessageBeep调试程序,当执行到我的代码的时候,会发出声音,但当上传应用的时候,我会删除这个API调用。

微软支持3种不同的技术开发商店应用:本地c/c++,.NET(c#/vb),JavaScript。

本地c/c++:可以调用winrt api调用系统功能,也可以调用其他c/c++代码,但不是所有的C Runtime都支持。具体见:http://msdn.microsoft.com/en-us/library/windows/apps/jj606124 .aspx
c/c++开发者可以用DirectX或者winrt xaml做为表现层,也可以同时使用dx和xaml。具体见:http://msdn.microsoft.com/en-us/library/windows/apps/hh825871.aspx

dx提供了d2d和d3d库,而xaml只提供了基于2d的图形元素和效果。

开发者一般用这种技术来节省内存和提高效率,多数情况是为了开发实时游戏。因为c/C++编译成本地代码,开发者必须为每种cpu架构重新编译。

C#、VB:可以调用winrt api,也可以调用.net的子集,开发者一般用它提高生产效率,因为垃圾回收,运行时类型强制安全,反射,LINQ,正则表达式等等。.net开发者可以用xaml创建基于form的app,也可以通过p/invoke调用directx api.如果项目的目标平台是anycpu,生成的exe或dll文件不会绑定到某一个cpu架构上(假设不依赖特定的cpu类库),这样编译一次,可以运行在多个平台。

JavaScript,开发者可以通过winjs调用winrt api,适合熟悉js,html,css的开发者。

所有的app最终还是用directx绘制,winrt xaml 提供了按钮,grid view, toggles, textbox等控件,这些都是基于directx的。如果用.net调用directx的话,可以用sharpdx.org或slimdx.org的封装库。


如何选择?考的因素有几下几点:

性能:虽然.net和js的runtime有垃圾回收和运行时编译器,而C++没有。用html和js写简单的canvas游戏。但对于实时动作游戏,C++和DX是更好的选择。

遗留代码和第三方代码:如果之前有一些代码是用某种语言写的。

共享代码:如果想在不同的app间共享代码。比如C#代码可以在商店应用,windows phone, asp.net程序间共享。js可以在商店应用和网页程序共享。

框架支持:如果处理xml,.net的linq是不错的选择。类似地,C++可以用stl或boost库,js可以用jquery。

产权保护:用js写的商店应用直接输出了源代码。.net程序输出的IL代码很容易被反编译。C++代码最难被逆向。


重点:不需要限制在某一种语言上,可以把C++,C#,vb编译成winrt组件,然后供其他语言调用。例如可以把C++/stl的代码封装成winrt组件给C#调用。但是js不能用来创建winrt组件。 


0 0