Windows Mobile开发:C++还是C# -- 哪个更好?为什么?

4
在进行Windows Mobile开发时,应该使用哪种语言?C#、C++还是其他语言?为什么其中一种比其他语言更好?
5个回答

5

这要看你写什么类型的代码。

通过C#中的P / Invoke可以调用操作系统的本地功能,但是如果需要大量使用,则使用原生的 C++ 可能更容易。您还需要使用C ++来使用某些未被 Compact Framework 包装的硬件。

大多数硬件(GPS、相机等)都可以通过 CF 获得。 如果您使用的是 Win Mobile 6.x 设备,则最好使用 C#。除了硬件外,Pocket Office (POOM) 对象模型也可供 C# 使用,因此您可以与其集成。

值得注意的是,对 Windows Phone 7 的大多数引用都是指托管代码和 Silverlight 的可能性。 在使用 Silverlight 的情况下,您必须使用 C# 进行编码。

除非您的应用程序需要高性能或极度节约内存,否则请使用 C# 或 VB.NET。

Scott


只是顺带一提,Silverlight 不一定意味着 C#。例如 CE 6.0R3 具有完整的“Silverlight” XAML 引擎,但它只能从 C++ 中使用。 - ctacke
没错 - Silverlight 可以使用 VB.NET 编写,但不能使用 C++ 进行目标定位,因此在这种情况下,选择 C# 是正确的答案。Win CE 6.x 的 Silverlight 实现非常酷,但 Win Mobile 是 CE 的不同版本,目前没有 Silverlight 实现。 - Scott Davies
从现有的少量信息来看,似乎原生的Windows Phone 7 Series开发将非常有限,Silverlight和XNA将成为主要的呈现层,而托管的.NET代码将负责重活。 - Nate
据我所知,WP7与Windows CE无关。它更像是Zune而不是Windows Mobile。 - jalf
感谢提供 XDA 的链接,这是一个很棒的网站。@jalf:请参考 http://en.wikipedia.org/wiki/Zune 并查找内核基于 Win CE 的提及。Win Mo 6.x 手机是 Win CE 操作系统的变体,但与标准的 Win CE 6.x 配置文件具有不同的 UI/功能(例如,Silverlight 存在于 Win CE 6.x,但不存在于 Win Mo 6.x)。 - Scott Davies
显示剩余3条评论

2

主要取决于任务。

C++ 有以下优缺点:

  • 直接访问资源,程序更快
  • 可以访问非常深层的操作系统部分,但对于高级应用程序不是必需的
  • 开发难度较大,需要由开发人员管理资源

C#:

  • 在虚拟机(CLR)下运行,因此速度较慢
  • 更快、更容易的应用程序开发
  • 丰富的内置库

2
这个问题没有标准答案,因为没有一个“更好”的通用定义。如果你已经熟悉C++并且有大量的C++代码资产,那么C++肯定很吸引人。如果你只熟悉c#而不是C++,那么C#肯定很吸引人。
C++应用程序加载速度更快,但对于许多应用程序来说,这并不重要。C#应用程序可以写得更快,但它们也没有确定性。我再也不会尝试使用C++编写UI了,也不会考虑在C++中进行数据库访问。但我不会在C#中编写驱动程序或shell扩展。
总的来说,我交付的大多数解决方案都是两者的混合体。C#有其优点。它快速编写,易于调试和单元测试,难以(虽然不是不可能)创建泄漏,并且对于某些操作(如数据访问或XML解析)更加简单。
C++也有其优点,例如执行速度快(虽然C#可以使许多事情变得同样快),确定性以及能够插入想要本机入口点的东西。
所以我的答案是什么?你需要了解两种语言,并可能使用两种语言编写你的解决方案。你最终使用的每种语言的百分比取决于你的最终目标。

你可能会发现在更多的移动项目中坚持使用C#是有用的 - Mono Touch (http://monotouch.net/)让你用C#编写iPhone应用程序,并且他们正在计划发布针对Android手机的版本(称为Mono Droid),尽管Mono Droid尚未发布。与使用C++、Objective-C和Java相比,坚持使用C#更容易。 - Scott Davies
也许在理论世界中是这样,但大量的WinMo代码在CF中非常特定于CE,使用Microsoft的WindowsMobile命名空间或P/Invoking到coredll。任何重用的可用性都非常有限,UI元素也大不相同。出于这些原因,我不会说C#比C++在这些平台上更具可移植性。 - ctacke
智能手机的核心服务肯定是独特的,但我仍然认为你有更好的机会在所有三个平台上利用C# 3.0代码。例如,iPhone上的UI特定内容通过C#进行封装。当然,这些包装器与Windows Phone GUI API不同,但我认为坚持使用C#比学习iPhone的Obj-C和Android的Java更容易。算法并不一定与平台绑定。 - Scott Davies

1

这要看情况。

至少提供一个具体的用例。也可能使用SO搜索? :)

C++或C#用于编程移动条码设备?

编辑: 显然,其他人更快地给出了更明确的答案。尽管如此,我仍建议阅读上面的SO线程。


1

根据我的经验,从C#开始会更容易一些,如果紧凑框架提供的API对您来说足够了,那么您就可以了。

另一方面,如果您的项目有些复杂,或者想做一些紧凑框架中没有的事情,您可能需要在C++中创建一个辅助程序库。即使在这种情况下,您也可以在C#中编写主程序,并在C++中编写辅助程序库。

如果直接使用C++进行编程,您可能会受益于其比C#更好的原始性能,这对于制作游戏非常有用。

但是,您也将更多地受到Windows Mobile操作系统的限制,例如每个进程的最大32MB内存限制,或者所有.dll共享相同的地址空间。

因此,最终取决于您计划做什么以及您的经验。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接