Visual Studio 2015 C++跨平台移动开发(一) -概览

本文介绍了如何使用Visual Studio 2015 RC进行C++跨平台移动开发,特别是结合Xamarin进行Android和iOS应用的开发。作者探讨了跨平台开发的不同方案,如Xamarin、Cordova和RemObjects,并强调C++在底层开发的优势。通过实例展示了如何创建一个C++共享库,并在Xamarin项目中调用,从而实现跨平台功能。

        编者语:相信大家看到这个文章的时候,会是通宵看完了Build 2015第一天的主题演讲,或者是早上看Build 2015的相关消息。但是我相信大家都会为Visual Studio 2015 RC 的发布给很多的掌声。哈哈做技术是一个令人兴奋的活,特别看到了一个新的开发工具。而我由于是Microsoft MVP ,我比大家提前几天拿到了Visual Studio 2015 RC 。从今天开始我会开始和大家说说如何通过C++进行跨平台开发。今天为大家先做一个开篇。(写下这篇文章时,估计离Build 2015开始还有4个小时,而你们看到我的文章会是将近早上的9点30分)。还有带病工作也是非常痛苦,希望大家看完后,为我给点掌声偷笑偷笑偷笑

       跨平台开发,现在的方式有很多。例如Xamarin ,Cordova, RemObjects 。对于Visual Studio 2015 , 已经整合了Xamarin 和Cordova ,并且通过Hyper-V的方式带来了全新的Android 模拟器(唯一失望的是没有iPhone 模拟器,所以调试还是需要我大爱的Mac)。而且你可以通过插件方式安装RemObjects .(这里也要吐槽一下,我们需要通过佛跳墙方式去安装Visual Studio 2015 Cross Platform 的东西 ,因为涉及到Android SDK, Android NDK, Android...... )。

       

       关于跨平台开发

       这三年来我一直在不同场合和微软推跨平台开发的案子,这里主要提到了Xamarin .(说起这个,还欠大家MVA的课程呢,我相信我会做好的)。
       如果大家有兴趣可以到Channel 9 看以下两个主题演讲:

       跨平台武功尽在Visual Studio - 介绍了Xamarin , Cordova, RemObjects , C++ 跨平台

         跨平台移动开发 - 介绍了Xamarin 在不同平台的开发过程

       在演讲的过程当中也有不少的问题,有人会质疑自身app变大了,有人会质疑C#/JS的执行效率,有人会质疑价格,有人更会觉得还是用户原生,毕竟在开发跨平台应用中你还是需要考虑了解各自开发的特性,诸如UI, 底层,内存释放的特性。这些问题,我也比较认同。但是无论是Cordova ,Xamarin , RemObjects 都是一个很不错的跨平台方案了,他们也在进步。以Xamarin为例,他们不但解决了逻辑层跨平台的问题,也对上层不同平台的UI进行了非常完美的整合-Xamarin  Forms 。这些都是需要肯定的。
       
       移动开发其实在做什么?

       先来看看传统的三大平台是怎么做


       

        
        上面的图不难看出做移动应用无非都是基于网络服务的接口,或者基于系统的底层,或者是硬件的操作。而更复杂的并不是这些所谓的逻辑操作,而是投入到创建UI和UI的交互逻辑上。这个正是Objective-C / Swift, C#/WinJS, Java 所针对的平台所做的东西。而所谓跨平台,更多是在这部分做文章。 Cordova 也好, Xamarin和RemObject的优势更多是用一种语言把UI和UI 交互搞定了。而逻辑层,大家都不约而同地认为这些所谓的托管语言不及C++来得优秀,而且通过C++基于Android/iOS/Windows各自出了不少优秀的库,这些库需要快速迁移到其他平台。好! Visual Studio 2015就是为了这个带来了C++ 的跨平台方案。

        C++跨平台
       
       
       这是一个从微软C++团队介绍的截图(更多请参考这里:http://channel9.msdn.com/events/Visual-Studio/Connect-event-2014/311),这里讲述了C++对于跨平台开发的优势和将会有的功能。通过C++你可以完成绝大部分的底层开发,而界面还是交回给对应的平台。据说Office 团队的跨平台实现就是基于C++, 所以我们不用质疑他的可行性。
       
       更进一步

       C++ 结合Xamarin完成开发工作, 这个是我所喜欢的方式,因为这个各占所长了,Xamarin减轻了学习成本,而C++对平台底层更具效率。Cool !!(这里我要说说,这只是其中一个方案,你可以用回原生的,但在未有更多资料前我不会说怕有什么变化,日后我会补充)


       
          一个简单的例子

          下面来简单看看(话说我希望做一个简单的示例,但是发现在Win10 + Visual Studio 2015 的环境上各种水土不服,所以望大家见谅我只做android的例子)

          1. C++跨平台究竟有什么?
          

          你可以为iOS, Android 创建基于C++的Dynamic Library 和Static Library ,当然你也可以编写一个Android 和 iOS同时使用的Shared Library.

           2. 我这里使用Shared Library(Android/iOS)模板创建一个共享库,

         这里我把项目命名为CPPDemo,而Shared Library 命名为SharedLib,如图:
         

         项目生成为,会有三个Project

         
         这里,我介绍一下 , Shared 是共用的一块,你可以为iOS,Android共建一些东西,如对API的访问,而对于Shared.Android, Shard.iOS是对这个共有的东西进行调用,并针对各自平台进行定制,并封装成对应平台的静态库。生成的静态库你可以给原生的程序调用个,如你可以从Android Studio 调用生成的so/Xcode调用生成的a,也可以给跨平台的解决方案所调用。

         我这里对Shared做一些调整,如图

         
         之后针对Android部分进行修改,由于我需要给Xamarin调用xia,所以需要做一个扩展,大家或者会了解过C#如何调用C++(当然你也许是个初哥,不紧要这个以后我会给大家带来更详细的介绍),这个是必须做。
        

        接下来也对Android的项目属性修改,将它的名字修改为libDroid这样方便调用。

           

       3. 引入Xamarin

        好接下来去创建一个Android 的Xamarin项目,并把SharedLib.Android作为引用添加到项目中,

        
        之后在MainActivity.cs上添加如图代码

        
        

          点运行看看(这里很遗憾只能在真机上运行),当我点击这个按钮后,按钮文字会变成“这是一个安卓程序”。

           
           

         

        感觉相当不错吧。先写到这里,接下来,我会连载数篇文章的,感谢大家!

 

        
       

         

目录 前言 第1章 Windows CE及开发环境概述 1.1 Windows CE概述 1.1.1 Windows CE嵌入式系统概述 1.1.2 Windows CE版本 1.1.3 Windows CE 6.0概述 1.1.4 嵌入式开发流程 1.2 开发环境概述 1.2.1 Visual Studio 2005的Visual C++——Windows CE开发环境概述 1.2.2 示例程序HelloWorld 1.3 Windows CE附带远程工具概述 第2章 图形编程 2.1 设备环境类 2.2 图形对象类(GDI) 2.3 绘制各种图形 2.4 绘制位图 2.4.1 CDC绘图函数描述 2.4.2 动画效果 2.4.3 抓屏 2.4.4 图形显示特技 2.5 显示压缩格式图片 2.5.1 SHLoadImageFile方法 2.5.2 Imaging技术 2.6 简单二维曲线示例 2.6.1 二维曲线类C2Dgraph的创建 2.6.2 使用二维曲线类C2DGraph绘制曲线 第3章 对话框控件 3.1 常用控件 3.1.1 微调按钮 3.1.2 滑动条 3.1.3 进度条 3.1.4 列表视图控件 3.1.5 树控件 3.2 创建图形显示控件 3.3 创建LED数字显示控件 第4章 进程 4.1 进程 4.1.1 进程概述 4.1.2 进程创建 4.1.3 进程终止 4.1.4 其他进程函数 4.1.5 “进程列举并管理”实例 4.2 进程间通讯 第5章 线程 5.1 线程 5.1.1 线程概述 5.1.2 线程优先级 5.1.3 线程API函数 5.2 线程同步 5.2.1 未使用线程同步 5.2.2 利用事件同步 5.2.3 利用互斥同步 5.2.4 利用临界区同步 5.2.5 利用信号量同步 第6章 文件 6.1 文件基本操作 6.2 文件综合操作示例 6.3 内存映射文件 6.3.1 内存映射文件概述 6.3.2 利用内存映射文件实现进程间通讯 6.4 文件系统管理 6.5 注册表编程 6.5.1 注册表简介 6.5.2 注册表API函数 6.5.3 注册表操作举例 第7章 多媒体编程 7.1 Direct Show介绍 7.1.1 DirectShow技术框架 7.1.2 过滤器(Filter) 7.1.3 Filter Graph Manager 7.1.4 Pin 7.1.5 DirectShow 接口定义介绍 7.2 媒体播放器示例 7.3 摄像头捕捉示例 7.3.1 摄像头捕捉概述 7.3.2 摄像头捕捉示例 第8章 Windows CE基础数据库编程 8.1 EDB概述 8.1.1 装配数据卷 8.1.2 卸载数据库卷 8.1.3 创建数据库 8.1.4 创建会话对象 8.1.5 打开数据库 8.1.6 事务操作 8.1.7 删除数据库 8.1.8 枚举数据库卷以及数据库 8.1.9 查找或移动记录 8.1.10 写记录 8.1.11 读取记录 8.1.12 删除记录 8.1.13 流操作 8.2 数据库操作综合示例 第9章 SQLCE数据库编程 9.1 SQL Server FOR CE的介绍 9.1.1 SQLCE简介 9.1.2 SQL Server CE 3.0的安装 9.1.3 SQLCE 3.0连接配置 9.2 OLEDB 编程访问SQLCE 3.0 9.2.1 OLE DB 概述 9.2.2 OLEDB 编程 9.3 SQLCE远程数据访问 9.3.1 Pull(拉数据) 9.3.2 Push(推数据) 9.3.3 Submit(远程T-SQL操作) 9.4 远程数据访问综合示例 第10章 串口编程 10.1 串口概述 10.2 串口编程API函数介绍 10.3 CE串口综合示例 10.4 GPS编程示例 第11章 网络编程概述 11.1 套接字编程基础 11.1.1 WinSock初始化和释放 11.1.2 创建套接字 11.1.3 关闭套接字 11.1.4 绑定套接字 11.1.5 监听套接字 11.1.6 等待连接 11.1.7 建立连接 11.1.8 发送数据 11.1.9 接收数据 11.1.10 设置套接字模式 11.1.11 Select I/O模型 11.2 PING编程 11.2.1 PING编程概述 11.2.2 PING编程示例 11.3 RAS拨号编程 11.3.1 建立拨号连接 11.3.2 关闭拨号连接 11.3.3 列举已建立的活动连接 11.3.4 列举电话簿条目 第12章 UDP编程 12.1 UDP编程概述 12.2 UDP编程示例 第13章 TCP编程 13.1 TCP编程概述 13.2 TCP客户端示例 13.3 TCP服务器端示例 第14章 DLL编程 14.1 DLL概述 14.2 DLL的调用 14.2.1 静态调用 14.2.2 动态调用 14.3 DLL的创建 14.3.1 Windows CE DLL的创建 14.3.2 基于MFC的Regular DLL的创建 14.3.3 资源DLL 第15章 COM编程 15.1 COM基本知识概述 15.1.1 什么是COM 15.1.2 什么是接口 15.1.3 COM基本结构 15.2 使用ATL创建COM示例 15.2.1 ATL对COM支持概述 15.2.2 ATL创建COM对象示例 15.2.3 创建客户端调用CEComServer 15.3 可连接点对象及示例 15.3.1 可连接点对象概述 15.3.2 连接点示例 15.4 创建ActiveX控件 15.4.1 ActiveX概述 15.4.2 使用MFC向导创建个简单的ActiveX控件
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值