繁体   English   中英

用C ++编写的Windows编程

[英]Windows Programming in C++

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

现在这些技术在软件行业的普及程度如何?

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

我认为学习Win32 SDK很有用,因为它可以帮助您了解Windows内部的工作方式。 我发现学习钩子和子类非常有趣。 所以,如果它感兴趣你那么你应该去做。 to know Win32. 但是,您可能知道Win32。 它今天还没有过时,但它可能在未来。

我从未对MFC感兴趣,因为它需要付费版本的Visual Studio。

我认为Win32 / 64 SDK永远不会过时,因为性能要求不会用.NET或Java编写驱动程序或其他低级程序。 如果你要在.NET中开发,那么MFC或wxWidget对你来说毫无用处。

我定期在.NET中开发,并且真诚地,我在.NET中创建的每个程序都称为一些Win32 API函数。 所以学习Win32 / 64 SDK并不是没有意义的,但是很耗时。

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

不,现在不要费心学习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都是垃圾收集环境,但您必须确定性地释放OS资源(显式调用Dispose),例如网络连接,窗口句柄,内核对象等等。 您永远不应该依赖垃圾收集器为您释放这些对象,因为GC是非确定性的。
  3. 调试,知道内部严重有帮助。
  4. 知道Win32有时可以帮助解释.NET中的API设计。 .NET API的某些部分是在Win32 API上建模的,但.NET API的某些部分比一些真正令人发指的Win32 API设计有了极大的改进(例如,考虑使用GDI的API)。
  5. 最后,了解Win32可以帮助您解决应用中的性能问题。

在Microsoft的流行操作系统基于其他东西之前,Win32不会过时。 有一次,微软将在Vista中用.NET取代Win32 / 64,但这并没有成功。 即使对于未来取代Win32 / 64的任何内容,您仍然需要了解OS SDK。 冒着听起来像推销员的风险,我会说学习Win32实际上会帮助你编写更强大的应用程序,并将极大地帮助你的调试技能,这是帮助你保持就业的两个重要项目。 我永远不会雇用一个没有至少一些Win32经验的Windows程序员。

我建议使用Richter / Nasarre的“Windows via C / C ++”作为Win32上一本好书的一个例子(是的,它显然是针对C / C ++,但是这些作者在解释Win32方面表现非常出色)。

希望这可以帮助。

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

有两个例外: - 我为一家软件公司工作,我们受到客户要求的约束,通常包括编程环境。 因此,如果客户只知道MFC,我们将制作一个MFC项目。 但这变得越来越罕见。 如果我们有选择,我们将使用.NET或Java。 - 您拥有一支拥有这些旧技术专家的团队,他们的工作效率很高。

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

我不会把C ++或MFC称为过时的,但它的新工作相对较少。 (我非常希望永远不会支持另一个Win32程序。)新的C ++标准应该在200B以外,人们将继续努力,而且微软一直在为MFC添加新的类,所以显然有持续的兴趣并继续工作。

对于专业开发,我建议你学习一些不同的东西,但那就像Lisp或Haskell,而不是C ++,据我所知,在了解MFC方面没有特别的优点。

实际上,微软迫使企业使用他们最新和最好的技术。 对于知道这两种技术的人来说总会有工作,因为有人必须移植遗留代码。

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

你需要决定你想去哪里。 一旦你有了地图,那么你可以为旅程提供合适的物资。

与Win32相比,我发现Java可怕。 有人需要削减大约百分之九十的内置库。

我不会打电话给Win32这样陈旧的。 正如其他人所说,这实际上取决于应用程序。 作为游戏开发者,我使用的是Win32,而DirectX则更多。 我可以将我的Windows代码加倍或加倍,它仍然只是项目的一小部分。

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

至于Haskell,我发现在几乎所有方面都是一种真正可怕的语言。 在我看来,它提供了一些“功能”的抽象数学定义,而不是“可编程”的真正定义。

Win32 SDK现在用于利基市场,由于某些原因(传统的Win32系统,游戏,系统驱动程序,Windows嵌入式系统)无法使用更多现代技术。 如果你不打算在这些市场上谋求职业,我现在不会费心去学习Win32。 这不是没用的,没有新的东西可以教你,但让我们面对现实,即使在我们说话的时候,也有很多新技术出现。 我在等待名单中有十几种技术/语言,可以开始学习和试验。 你当然可以找到更有趣,更有利于职业的技术来学习。

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

C#和.NET实际上构建在Win32 API之上。 要访问通过C#和.NET公开的Win32的一些高级功能,您可以使用Pinvoke手动将C Win32功能公开给您的C#应用​​程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM