Win8探索学习笔记(3)基于C++的metro程序基础

来源:互联网 发布:c语言用if绝对值函数 编辑:程序博客网 时间:2024/05/16 09:54

本来打算像上一篇一样看看基于C++的Metro程序都有些什么内容的,据说Metro支持native c++,结果。。。尼玛昨天新建一个c++ metro工程都可以跑的,今天就见鬼了,随便建一个c++工程自己都编译不过去,尼玛VS11的bug也太多了。看了看默认生成的c++代码,里面什么partial ref的,应该都是托管c++才有的关键字吧?(PS:不熟悉托管c++,所以不太清楚如何知道一段代码属于托管c++。)怀疑:MS的C++ Metro也是使用托管C++构建那个UI。所谓的Metro支持native C++,应该是说可以使用native c++构建一些模块,给其它的Metro程序(JS/managed c++/c#/VB)去调用而已吧。这个里面,对于MS来说,根本不算新东西吧。不知道那个WinRT到底体现在哪里,到底是native c++实现的还是托管的玩意。

总结:从目前了解的情况,实在没有看到win8的新内容到底在哪里,除了那个metro style的UI是一个创建,程序的本质上,貌似没看到实质性的创新,无非就是:1. 借用了一些现有的“流行”的模式/实现,比如HTML/JS的支持,比如store的模式。2. 换了一些接口定义,弄了一些“忽悠”人的各种技术词汇。当然,这只是针对C++的角度来看的,对于.net来说,或许有很多新的东西,比如可以更好的调用native c++什么的,具体我就不清楚了,不熟悉.net!慢慢来吧,有了新的发现再继续研究,至少,就目前的preview来看,没有更多兴趣去研究了。:(

不过,从另外来说,其实MS这样也是没有错误的,毕竟那个metro风格,用在PC上还是不适合的,win8可能主要考虑的新的东西都在触摸设备(平板)上的,所以,自然,对于这些应用,程序的效率也是不重要的,用托管的玩意、JS这些去整一些界面神马的就够了,可能我对MS的要求高了点!


说明:这里的描述都是个人看法,很可能错了,毕竟主流的声音都是说winRT是一个API结合,不是一个运行时,都说基于C++的是native的,待研究啊。。。

http://bbs.pediy.com/archive/index.php?t-140353.html

http://www.codeproject.com/KB/cpp/WinRTVisualCppIntro.aspx

http://kb.cnblogs.com/page/116862/

http://webservices.ctocio.com.cn/138/12201138.shtml

http://topic.csdn.net/u/20110915/08/e4b7e628-a412-49d4-a8c8-0d4002d94635.html

http://tirania.org/blog/archive/2011/Sep-15.html

http://msdn.microsoft.com/en-us/library/windows/apps/hh454062(v=VS.110).aspx(MSDN,WinRT文档)


补充:

上面是曾经的一点想法,现在看来,WinRT是基于COM的,使用C++的Metro程序理论上是可能完全native的

这里要补充的一点是,上面提到了用VS11建立一个C++工程突然不灵了,自己都编译不过去,现在居然被我自己给找到解决方法了,确实应该是VS11的bug。其编译错误消息是:

Error : Manifest references file 'hellometro_withcpp.exe' which is not part of the payload.

找了很久没找到解决方法,类似的文章找到了"http://social.msdn.microsoft.com/Forums/zh-SG/winappswithhtml5/thread/88842e72-a620-4ee7-9a6a-d0ba52a36240",但是这个文章很容易理解,但是我这里的错误是exe的问题,尼玛exe不是VS自己生成的。经过仔细分析,发现exe是生成了,打开manifest文件看看,发现里面的文件名居然被VS偷换了,我的工程命名是hellometro_withCPP,所以得到的exe是hellometro_withCPP.exe,但是那个VS自己生成的manifest居然是小写的!手动修改namifest就可以build通过了。所以:如果你使用C++的metro工程,工程名不要使用大写字母就不会遇到这个问题了!

原创粉丝点击