C Win32编程与现代专业人员的相关性如何?

C Win32编程与现代专业人员的相关性如何?,c,winapi,C,Winapi,作为Charles Petzold的书《代码和带注释的图灵》的忠实粉丝,我偶然发现了他的书《编程窗口》,该书用C语言教授Win32编程。我是一名计算机科学的大一学生,首先学习了C语言,但我现在使用C和.NET进行Windows编程,所以我想知道Win32是否仍然与专业的Windows程序相关。作为一名想编写Windows应用程序的学生,学习Win32 API到本书所涵盖的深度是否值得我去学习呢?在我看来,不值得。我很久以前就学会了,所以你不必 我认为你先学习C是很好的,我会时不时地编写C程序,但

作为Charles Petzold的书《代码和带注释的图灵》的忠实粉丝,我偶然发现了他的书《编程窗口》,该书用C语言教授Win32编程。我是一名计算机科学的大一学生,首先学习了C语言,但我现在使用C和.NET进行Windows编程,所以我想知道Win32是否仍然与专业的Windows程序相关。作为一名想编写Windows应用程序的学生,学习Win32 API到本书所涵盖的深度是否值得我去学习呢?

在我看来,不值得。我很久以前就学会了,所以你不必


我认为你先学习C是很好的,我会时不时地编写C程序,但我不明白为什么win32 API会有用。老实说,这是一个很大的混乱。

没有win api调用,有些事情是做不到的,但是随着.net的每个版本,这些事情变得越来越少,所以不,如果我在你那里,我就不会学习win api。

这真的取决于你想要开发的应用程序的类型。如今,对于大多数目的而言,C#和.NET是完全合适的。但是,某些类型的应用程序需要尽可能少的依赖项(我想到的是shell扩展),而这些依赖项不像.NET应用程序那样实用。对于那些需要Win32的用户


像往常一样,即使你的大部分工作都在使用.NET,至少对Win32有一个基本的了解也是值得的。

我完全同意乔尔·斯波尔斯基在他众多著作之一中所写的内容。我认为了解机器的底层是至关重要的,不仅要能够编写高质量的代码,还要能够解决不可避免的问题


因此,是的,至少了解WIN32 API的基础知识是很重要的,可能不是很深入,但至少要知道它在那里,是您将要编写的所有代码的基础。

除非您需要一些不在.NET Framework中的功能(例如获取打印机驱动程序的详细信息),否则不需要。这大约是99%(当然,这是我刚刚编造的一个任意值)你将要做的事情


即使您使用的是Win32而不是.NET,是否真的需要学习与本书相同的深度?浏览各节,了解如果将来遇到问题,您知道在哪里可以找到它。然后停止。在需要或有空闲时间时深入了解。

您必须知道它的存在,因为大多数本机功能越来越多的“高级”托管语言最终会调用它们


此外,它还可以用脚本语言封装,如使用

我真的不认为“学习Win32 API”对任何人都是现实的。API(是的,不止一个)非常庞大,你几乎不需要详细了解所有API。我建议你阅读一些基础知识(即窗口创建、窗口消息传递、窗口过程,可能是一些GDI等)并在需要时使用MSDN查找其余部分。

一定要学习AlexDrenea提到的基础知识。虽然.NET保护您不受许多Win32 API调用的影响,但Win32 API如此庞大,您一定会遇到.NET没有为您打包的情况


一种现实生活中常见的情况

根据格雷格的评论,它在某种程度上依赖于域。我做过很多Windows CE/mobile编程,其中.NET对于许多设备来说过于苛刻,其他框架(如MFC)也没有完全实现。在这种情况下,Win32的大部分仍然非常相关


也就是说,我不会预先学习所有内容,我只是简单地浏览基础知识,并在需要时挖掘出其余的内容。文档和示例对于这种方法来说已经足够好了,像这样的社区提供的在线帮助也是如此。

如果你在Windows上编写C,这是非常相关的。不是所有的壮举Win32的部分已通过.Net库公开。我在这里介绍的WM_SETREDRAW消息技术就是一个具体的例子:。在其他时候,控制焦点问题也需要它

此外,了解Win32和Windows的工作方式将使您更好地了解C#/.Net的各个方面,例如:

  • Control.Invoke()实际上做什么
  • Control.BeginInvoke和Control.Invoke之间有什么区别
  • 究竟是什么导致控件的事件触发,例如OnClick等,以及如何调试它

也就是说,WPF改变了所有这一切,如果您只编写.Net 3/3.5代码,那么我的论点就失去了一些相关性。

我认为这已经得到了回答,但是如果您在.Net中进行.Net 2.0开发或任何winforms开发,您肯定会遇到很多问题,框架的某些部分如何包装win32和mfc,您需要深入研究这一点,以使内容真正按预期工作。

这在专业的Win32 api新闻组中已经讨论过多次( news://comp.os.ms-windows.programmer.win32)


(由世界上最伟大的大师和畅销书作者(Petzold、Russinovich等)撰写…

如果你试图解决业务问题,那么有比C更好的工具来编程Win32系统、Clarion、Delphi和其他我毫不怀疑的工具


但是我想学习如何工作,你对C很有好处。

我认为学习基础知识很重要。如果你学习了足够多的知识来显示一个包含一些字段、按钮和菜单的窗口。也许可以在单独的窗口中绘制一些东西。这将帮助你学习Windows真正工作的基础知识。我相信理解信息循环,认识到你看到的几乎所有东西都是一个窗口,这是每个人都应该知道的最基本的事情。当我第一次意识到一个按钮是它自己的窗口时,我的眼睛真的睁开了。这有助于你理解通过发送这些窗口信息可以打开和关闭事物的功能。windows让您可以访问未在.NET或VB Classic中公开的功能,并让您