代码改变世界

一次失败的尝试——为M8SDK编写.NET版本

2010-02-06 16:59  JimLiu  阅读(887)  评论(6编辑  收藏  举报

  魅族M8有个开发包,叫M8SDK(废话),这是用C++写的,也是为C++服务的。

  SDK包括3部分:COM、MZFC(Meizu Foundation Classes???)和PlatformAPI。COM是用来调用播放器、照相机、文件管理器、录音机之类的“基础设施”;MZFC是一套类似MFC的 UI组件,系统主题的,美工做的很漂亮;PlatformAPI则是用来调用重力感应、红外感应、背光、触摸屏这些平台相关的东西。

  嗯,这就是在M8上开发应用程序的A计划。

  但是我是一个C# Player,能用C#的时候我肯定是不会用C++的,而M8又是基于CE的,CE可是能跑.NET Compact Framework的呀,所以我当然要想着用C#来开发应用程序了。

  很遗憾,虽然这是可行的,但是:

  1. 用.NET的UI组件,其UI是极其原始的,很不好看,如果要自己去做界面美化,这会是一个繁琐而冗长、且难以复用的过程。
  2. 无法调用M8的系统API,也就是COM和PlatformAPI这两部分。

  好吧,那我来想想对策。

  既然只能用C++,好,那就用托管C++写一个兼容层,把所有SDK里的类都搞成托管类型,然后.NET语言就可以无缝调用啦!舒坦……

  嗯,是,但是(往往听到这个词的时候,一件好事就会变成坏事)——.NET CF是不支持C++的,我实在是不知道为什么,但是事实就是事实,我无奈,我尴尬,我放弃。这么完美的方法,就这么黄了,真是郁闷。

  那我们就来B计划,写2个兼容层,嗯,是的这个方法的确是有点2,但是也许是可行的哦!那就是先用C++写个兼容层,导出需要的API,然后用C#再写一个兼容层,DllImport这个C++写的DLL,然后就可以乌拉拉地用啦!工作量大了一倍,但是似乎也可行的啊~似乎是的,但是!因为类库是有C++ 的,对那些个什么封装继承多态之类的玩意,用的可是相当的好,DllImport对于传统的过程式代码的调用可以说是很好的,但是一调用对象式的API,就2了。费了九牛二虎之力,终于让C#可以调用C++写的类的实例方法,但是!无法实现多态!我@¥%……&*()——没有多态,我还玩个P啊玩?好吧,我总不可能把继承树上所有的方法都用C++重新写一遍,然后又在C#里都DllImport一次吧,我就2了。我无奈,我尴尬,我放弃。

  未果,未果,那么会怎么样呢?想用.NET复用MZFC里的那些UI组件,我看是没辙了。但是如果有需要,其他那些个API,还是可以轻松的 DllImport的,不过UI这块就头大了。
  魅族官方的.NET版SDK兼容??算了吧,似乎是连个固件都拖了N久,我对这种东西就不抱希望了。

  有没有“曲线救国”的方法呢?比如用另一套.NET的UI库来代替,可以是可以,但是这样就弄复杂了,而且不能复用系统主题,也不能享受MZFC里那些专门根据M8操作体验而设计的UI组件了。所以这样做……并不好……
  哎,本来以为可以有好玩的玩了,我就可以下手买个M8,但是如此一说,可开发性还是达不到我的要求,那么我就不买了吧……嗯嗯嗯……`