作为一名Mac/Unix开发者,如何进行MS Windows编程?

7
我有几年的Unix命令行工具编写经验(没有GUI经验),使用python、C和C++编写,最近才进入GUI领域(仅限Cocoa和IOS)。我学习了相当多的objective-C,并开始理解cocoa MVC的工作原理。然而,我正在开发的其中一个应用程序需要一个Windows版本,考虑到我完全没有Windows开发经验,我想知道一个好的起点在哪里。
我考虑使用Visual C++ 2010 Express作为我的开发平台(因为它是免费的,而且我不需要学习C++)。我的应用程序相对简单,只有两个窗口,并且大部分时间都在后台运行。但是,它需要与操作系统(加载dll等)和在线服务器(HTTP方法)进行通信,我不确定Visual C++ Express版是否给我提供了所需的API。Windows Forms应用程序是否足够?我是否走错了方向?我需要学习C#吗?任何建议都将不胜感激。
5个回答

3
如果您已经熟悉C++,那么Visual Studio C++ Express就足够了。只要不涉及复杂的GUI,您甚至不需要使用托管代码 - C++ Express允许您创建适用于C++控制台和GUI应用程序。您也不需要安装平台SDK - 它是VS C++ Express的一部分。
由于它不是托管C ++,因此您可以在各个项目之间共享源文件。尽管名称中有C ++,但托管C ++ 确实是一种完全不同的语言,如果您同时必须处理ISO C ++,它将令人感到非常烦恼。
注意:本机Windows API是一个C API,而不是C ++框架。因此,它不提供一组丰富的类来处理一致的框架。另一方面,虽然庞大,但实际上很容易使用。
另外:考虑到您已经熟悉Mac开发,有一个名为CFLite的LGPL(iirc)包可在Windows上构建,并实现Objective-C Cocoa API下面的C API。
如果使用其抽象,您可以在Windows和Mac(以及其他平台)之间共享更多的代码。
其他您可能想考虑的C ++ IDE:
- Code::Blocks - QT Creator 两者都可以配置为使用GCC的MINGW端口到Windows。

我在Python和C++之间犹豫不决,但由于我更熟悉C ++,所以我将尝试使用VS C ++进行此应用程序的开发。谢谢! - CodeWombat

2
如果你需要更多的“底层”东西,使用C++比使用C#更好。加载dll(即libs)很简单(pragma comment lib...),纯HTTP传输和通信也很简单。
因此,带有Windows窗体的VC++就足够了,它非常符合C++的风格。
你可以访问所有全局API,加载特定的API(如http)只需要两行代码:一行包含wininet头文件,另一行是lib(lib实际上是对dll的“引用”)。

1

如果你选择使用C++ Express,那么你需要单独安装Windows SDK,并为Visual Studio设置它。而且你不能使用MFC。

然而,我建议使用C#,因为它感觉就像是把小玩具积木拼在一起。更容易调试和维护。C#的问题在于它有很多库函数,你不可能知道你想要的是否已经被制作成函数了。但这就是我们在这里的原因 :-) 如果你觉得你想做的事情应该已经存在,请提出一个问题。C#缺少的一个显著特点是zip归档(它有类似的东西,但不完全相同)。对于zip文件,你可以使用公共库,比如SharpZipLibDotNetZip


使用C++ Express的唯一缺点是需要将所有部分组合在一起吗?相比于C++ .Net,使用C# .Net有哪些优势? - CodeWombat
C#比C++容易使用多了,这是毋庸置疑的。至于C++.NET,我不太清楚,从未使用过这种组合,感觉不太自然。 - Dialecticus
1
WinForms和C++并不是最好的朋友。大多数开发人员使用C#来完成应用程序的UI端,并使用C++来处理逻辑方法。如果您想要真正复制XCode/Interface Builder的体验而不使用跨平台解决方案,那么C#和WinForms确实是您最好的选择。在使用C#编码几天后,一个经验丰富的Objective-C程序员很可能会对内置库的广泛性印象深刻。 - Cody Gray

1
如果我是你,我不会那么快就跳进一个全新的API。你考虑过在Windows上使用Python吗?我看到的大多数Python包也都适用于Windows,所以你会感觉很熟悉。如果你需要一些GUI,你可以选择wxPython、pyGTK或类似的东西。
对于Windows特定的事情,你总是可以使用ctypes。特别是如果它们像加载DLL这样简单的话。

我曾考虑过使用Python。实际上,当我开始使用Mac版本的应用程序时,我正在使用Py-ObjC,但我很快就摆脱了Python代码,并用纯Obj-C编写它,因为事实证明这样做实际上更容易--在Cocoa API中几乎有一个类可以胜任所有工作,而对于我需要做的事情,Py-ObjC变得越来越像是hackish。我之所以考虑Windows表单/C++,是因为我试图将其与Interface Builder/Xcode体验相提并论。 - CodeWombat
在Windows世界中,与Python相对应的是C#。学习起来并不难,但如果你已经了解Python,并且可能已经实现了一些你需要在Windows应用程序中使用的功能,为什么要转向C#呢? - kichik
1
你说得有道理,如果我选择用Python编写应用程序,那么在调用Windows API时会遇到什么限制吗? - CodeWombat
结构体和指针在使用ctypes时可能不太好处理。只要没有自动化,COM也不会让你欣赏Windows。但是大多数基本API都不需要这些。如果你确实需要复杂的WinAPI,你可以创建一个DLL/EXE并从Python中调用它。 - kichik

0

你有考虑过使用Adobe AIR吗?它允许您在Mac、Linux、Windows和iOS等平台上部署应用程序。自2.0版本以来,与本地进程通信和启动一直是可行的,而最新的2.5 SDK可以定位到Android操作系统和电视。有了您的经验,您应该很快能够掌握ActionScript3/MXML。

此外,还有一些免费的IDE可以与Flex和AIR SDK一起使用。或者,如果您是学生或低收入开发人员,您可以从Adobe获得Flash Builder 4的免费副本:http://www.adobe.com/devnet-archive/flex/free/


编辑:我相信在iPhone上部署AIR应用程序需要Flash Professional CS5,其中包括iPhone选项的打包程序。同时,我已经阅读到AIR和其他iOS交叉编译器非常缓慢,因此最好使用Objective-C本地开发iOS。

我考虑过跨平台开发 (Qt,wxWidgets等),但由于这个应用程序非常小(在没有任何Objective C经验的情况下,开发Mac版本只花了几个月的时间(每周2-3小时),所以我决定使用Windows IDE和我已经熟悉的语言(在这种情况下是C++)编写它可能会更快。一旦我开始进行跨平台开发,我可能会考虑Adobe AIR。 - CodeWombat

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