我正在开发一个新的应用程序,虽然我的背景主要是基于Mac / iOS,但我需要使用Windows应用程序来参与他们的Imagine杯。
这个项目包括通过套接字连接(到服务器,而不是ad-hoc)在客户端之间进行通信,我需要Mac和Windows客户端能够相互通信。我也不想两次编写这个网络代码,只需在两个平台上编写不同的本机UI代码。这使得网络更容易(我相信两个不同的平台不会以不同的方式与服务器交互)并允许在两个平台上使用本机UI。
C ++是这项任务的最佳语言吗?两个平台上的标准库是否相同?我知道我必须使用Microsoft的Visual C ++库,因为好像很难利用C#中的C ++代码;这是真的吗?
我以前从未真正编写过跨平台应用程序,尤其是处理平台之间网络的应用程序。
答案 0 :(得分:4)
如果您打算使用C ++,我强烈建议您在Boost中查看ASIO,这是我的第二个“the_mandrill” - 这是编写代码一次并支持这两个平台的好方法。
关于C ++是否是正确的语言是更主观的。我个人的感受是,如果你需要问,赔率,这不是最好的方法。
选择C ++实现网络代码的原因是:
避免使用C ++的原因是:
您可能考虑的替代方案包括:
您还问:“我知道我必须使用Microsoft的Visual C ++库,因为好像很难利用C#中的C ++代码;这是真的吗?”< / p>
您可以完全避免使用Visual C ++库 - 通过使用C ++以外的语言进行开发,或使用备用C ++编译器 - 例如Cygwin或MinGW提供G ++ ...虽然我建议使用Visual C ++来构建C和适用于Windows的C ++代码。
使用C#中的C ++代码并不难 - 虽然我不推荐它作为一种方法......它可能过于复杂。 Visual C ++可以(可选)从C ++源代码编译“托管代码”(需要掌握一些语法扩展,并且使用Mono而不是Visual C ++进行互操作的语法略有不同,但这些不是主要问题恕我直言。)这些CLR对象直接与C#对象交互,可以一起链接到一个程序集中而不会出现问题。使用Pinvoke访问本机DLL(可能使用C ++为本机架构编写)也很容易。然而,所有这些都是无关紧要的,因为.Net框架对system.net中的低级网络(类似于Winsock [2]提供的)提供了很好的支持 - 这为类似的设施提供了一个方便的面向C#的接口,并且如果使用C#(或VB.Net或任何其他CLR语言),可能会提供更方便的API来开发。
答案 1 :(得分:2)
我建议你看看Qt。 IMO Qt是用于跨平台应用程序的最佳C ++库之一。与Boost相比,Qt的好处是Qt甚至还有GUI类。
答案 2 :(得分:1)
最好的语言是非常主观的,但是如果你想要具有有用的抽象和C风格语法的可移植快速代码,那么C ++是一个不错的选择。请注意,如果您不知道任何C ++,那么学习曲线会很陡峭。
ISO标准定义的库在每个平台上的定义都是相同的,但是它的实现可能更少或更符合。也就是说,gcc,clang和MSVC(post .net)都能很好地实现C ++ 98。只要您不使用编译器特定的扩展名。
我强烈建议您查看针对您的网络的boost asio(以及一般的boost库),它使用非常有效的proactor设计模式。然而,它确实需要一些时间来解决它。
http://www.boost.org/doc/libs/1_48_0/doc/html/boost_asio.html
坚持使用标准库并提升并且大多数情况下跨平台问题不是主要问题。
最后,我会避免使用C ++ 11的功能编写跨平台代码,因为MSVC,GCC和Clang都实现了标准的不同部分。