用C++编写Windows程序

3

作为一名C#/Java程序员,我非常需要知道一个事实:Windows编程使用Win32SDK/MFC/wxWidget已经过时了吗?

现在这些技术在软件行业的受欢迎程度如何?

作为一名C#/Java程序员,我现在是否需要学习Win32SDK/MFC/wxWidget?

9个回答

5

我认为学习Win32 SDK很有用,因为它可以帮助你了解Windows的内部工作原理。我发现学习钩子和子类化非常有趣。所以如果你感兴趣,那么你应该去学习。然而,你可能并不需要了解Win32。尽管它在今天还没有过时,但将来可能会。

我对MFC没有太大的兴趣,因为它需要付费版的Visual Studio。


我同意。MFC/wxWidgets/等等都是“可以根据需要学习的另一个库”。所有这些库都在内部使用Win32 SDK,了解它是值得的。 - m_pGladiator

3
我认为Win32/64 SDK永远不会过时,因为驱动程序或其他低级程序由于性能要求而不会使用.NET或Java编写。如果您要开发.NET,则MFC或wxWidget对您没有用处。
我经常在.NET中开发,并且真诚地说,我在.NET中创建的每个程序都调用了一些Win32 API函数。因此,学习Win32/64 SDK并非毫无意义,但是需要花费时间。

3

即使您不打算编写或维护C/C++应用程序,也要学习Win32。

现在不必学习MFC/wxWidget。 MFC附带其源代码,因此您可以学习一些类如何实现对Win32的包装器,但这更适合于C ++程序员。尽管Visual Studio仍支持这种较旧的技术,但MFC的受欢迎程度已经降低。只有在需要时才学习MFC/wxWidget,如果您需要维护一些旧代码。

使用C#/Java,您可以解决很多问题,但是有时您需要直接使用Win32来完成某些任务,出于各种原因。也许某些功能在.NET/Java中根本不存在,或者存在错误,可以通过直接转到Win32来避免。也许您要解决的特定问题具有不寻常或严格的要求,并且您会考虑使用一些Win32调用作为必要的本机代码的一部分。真的有很多例子/情况。

学习Win32的另一个原因是,.NET/Java都是更高级别的抽象(这本身就是好事),但是了解内部工作原理确实有助于理解以下原因:

  1. 您会欣赏到.NET/Java为您做了多少工作。当然,您可以在C/C++中执行相同的操作,但需要更多的工作量。考虑这两种引人注目的.NET技术,WPF和WCF,它们为您完成了大量工作。
  2. 您将更好地理解资源管理。具体而言,.NET/Java都是垃圾回收环境,但必须确定性地释放操作系统资源(显式调用Dispose),例如网络连接、窗口句柄、内核对象等等。您永远不应该依赖垃圾回收器来代替您释放这些对象,因为GC是非确定性的。
  3. 调试,了解内部工作原理对此有很大帮助。
  4. 了解Win32有时可以帮助解释.NET API设计。 .NET API的某些部分是基于Win32 API模型的,但是.NET API的某些部分是对一些真正可怕的Win32 API设计的极大改进(例如考虑使用GDI的API)。
  5. 最后,了解Win32可以帮助解决应用程序的性能问题。

除非Microsoft的流行操作系统基于其他内容,否则Win32不会过时。曾经,Microsoft打算在Vista中用.NET替换Win32/64,但这没有实现。即使未来出现取代Win32/64的任何内容,您仍需要了解操作系统SDK。冒险像推销员一样说,学习Win32实际上将帮助您编写更健壮的应用程序,并极大地帮助您的调试技能,这是帮助您保持就业的两个重要因素。我永远不会雇用没有至少一些Win32经验的Windows程序员。

我建议阅读Richter/Nasarre撰写的《通过C/C++理解Windows》这本书,作为Win32相关优秀书籍之一(尽管显然是面向C/C++的,但这些作者在解释Win32方面做得非常出色)。
希望这能有所帮助。

0

我是一名架构师,我建议所有新项目使用较新的技术,如.NET或Java。根据我自己使用C++和.NET的经验,生产力的差异是巨大的。

有两个例外: - 我在一家软件公司工作,我们受客户要求的约束,通常包括编程环境。因此,如果客户只有使用MFC的人,我们将制作一个MFC项目。但这种情况越来越少。如果我们有选择,我们会选择.NET或Java。 - 您有一支专家团队熟练掌握这些旧技术,并且他们在使用这些技术时非常高效。


作为一名C#/Java程序员,我现在需要学习Win32SDK/MFC/wxWidget吗? - user366312
我会说不,我同意你原始问题的基本事实:Win32/MFC等已经过时了。 - Timores
我还会为极致性能至关重要的行业/应用程序(如游戏)添加一个例外。 - tloflin

0

像您这样的人有很多工作机会,所以我建议不要为了工作目的而学习它们。我们有一些MFC应用程序,但这部分是因为这是我们拥有的,另一部分是因为我们更相信C++的性能,对于他们来说性能非常重要。

我不会称C ++或MFC过时,但新的工作较少。 (我非常不想再支持Win32程序了。)新的C ++标准应该在200B发布,并且人们将继续开发它,Microsoft已经向MFC添加了新类,所以显然仍然存在兴趣和持续的工作。

对于专业发展,我建议您学习一些不同的东西,但那将是像Lisp或Haskell之类的东西,而不是C ++,就我所知,了解MFC没有特别的优点。


0

实际上,微软强制企业使用他们最新和最伟大的技术。因为有人必须移植遗留代码,所以总会有人需要了解这两种技术。

许多小型设备(手机)或游戏需要更轻量级的解决方案。如果你打算在这些领域工作,那么你肯定需要这些技术。

你需要决定自己想要去哪里。一旦你有了地图,就可以为旅程准备正确的物资。


0

相比Win32,我觉得Java很难用。有人需要削减大约90%的内置库。

我不认为Win32等是过时的。正如其他人所说,这真的取决于应用程序。作为一名游戏开发者,我使用Win32较少,而使用DirectX要多得多。我可以将Windows代码翻倍或翻三倍,它仍然只占项目的极小部分。

但是,如果您正在编写一个主要界面应用程序,并且具有相对较小且轻量级的后端,则.NET可能是一个不错的选择。

至于Haskell,我发现它在几乎所有方面都是一种真正糟糕的语言。在我看来,它似乎服务于某些抽象的数学定义“函数式”,而不是“可编程”的真正定义。


0

Win32 SDK现在主要用于一些小众市场,因为某些原因无法使用更现代的技术(遗留的Win32系统、游戏、系统驱动程序、Windows嵌入式系统)。如果你不打算在这些市场上追求职业生涯,那么现在学习Win32就没有必要了。并不是说它没有用处,也没有新东西可以教给你,但我们必须面对现实,即使在我们说话的时候,还有很多新技术不断涌现。我有十几种技术/语言在等待列表中等待学习和实验。你肯定可以找到更有趣、更有前途的技术来学习。


0

性能关键的应用程序(游戏)通常使用C++ Win32 API。

C#和.NET实际上是构建在Win32 API之上的。为了访问一些高级功能,这些功能不能通过C#和.NET公开,您需要使用 Pinvoke来手动将C Win32函数暴露给您的C#应用程序。


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